Xcode(9.x) Swift静态库

参考: Swift构建通用版本Framework以及Framework的使用及其注意事项

从GitHub下载Alamofire, 然后打开Alamofire.xcodeproj, 于是启动了Xcode.

1.顶部的Scheme切换到Alamofire iOS

Xcode(9.x) Swift静态库

2.中间的TARGETS选中Alamofire iOS, 切换到Build Settings, 搜索Mach-O Type, 将值切换为Static Library

Xcode(9.x) Swift静态库

3.菜单栏Product → Scheme → Edit Scheme, 选中Run, 选中Info, 将Build Configuration改成Release

Xcode(9.x) Swift静态库

4.顶部的Target切换到iPhoneSE(任意模拟器), 然后编译项目(cmd+b)

Xcode(9.x) Swift静态库

5.从左边的Products中, 右键Alamofire.framework, 选择Show in Finder, 可以定位到静态库的目录. 返回上级目录(cmd+↑), 会发现文件夹名是Release-iphonesimulator, 并且在附近有很多类似文件夹

Xcode(9.x) Swift静态库

6.顶部的Target切换到Generic iOS Device(或者真机), 然后编译项目, 会在Release-iphoneos生成类似文件

7.打开终端, 使用cd命令, 定位到这个目录, 执行lipo -info命令, 检查Alamofire, 会发现两个文件分别是"i386 x86_64"和"armv7 arm64"

8.执行lipo -create命令, 将两文件合并为一个, 直接输出到当前目录, 检查新的Alamofire, 会发现它是"i386 x86_64 armv7 arm64"

Xcode(9.x) Swift静态库

9.拷贝Release-iphoneos目录, 并命名为Release. 将新生成的Alamofire替换进去. 将Release-iphonesimulator中Alamofire.swiftmodule目录下的文件, 拷贝到Release中的Alamofire.swiftmodule目录下.

0.Release目录下的Alamofire.framework就是我需要的静态库了

Xcode(9.x) Swift静态库

另外, 如果不进行步骤3, Build Configuration将是Debug. 最终对应生成的文件将会在Debug-iphonesimulator和Debug-iphoneos中, 并且Debug-iphoneos中的Alamofire只有x86_64, 如果需要i386, 需要在Build Settings中搜索Build Active Architecture Only, 将Debug的值设置为NO


在我的项目中SwiftlyJSON是使用的源码, 我将Alamofire同样以源码的方式引入项目后, 发现部分方法重复定义了. 并且在调用Alamofire的request等方法时, 是直接request调用, 而不是Alamofire.request这种形式, 于是决定打包一个Alamofire静态库出来