IOS生成静态库

Categories: IOS

上次发了一篇《Cocoapods发布自定义开源组件库》的文章,这种开源组件库你发布后,别人通过pod下载安装到项目里面就能看到所有的源码信息,甚至能直接修改源码。但有时候有需要不能公开源码,但是又要打包给别人用的,比如公司的某个产品需要提供SDK给别人使用。

还是接着上面那篇文章来,假设你已经通过上面的pod create 生成好了lib模版,结构如下: 等我们开发好业务代码后,我们需要把项目运行方式调整到Release模式 Product -> Edit Scheme -> Run -> Info -> Build Configuration -> Release 。

   

调整好了之后,把我们的Example项目在模拟器和真机上分别运行一遍,一般我们开发一个库肯定也是要测试的,所以分别在真机和模拟器上都测试一下就行。为什么要跑两个地方?继续看下面

测试好了之后我们再看我们的项目的目录结构,Pods下面有个Products,里面有我们的库包: MyLib.framework上面右键,选择Show in Finder,就会在我们的电脑上找到我们的静态库MyLib.framework。 我们刚才测试的时候真机和模拟器都测试了,所以会生成两个MyLib.framework,另外一个在那里呢? 在Finder里用 cmd+⬆️ 快捷键 可以到上一层,按两次就来到了Products目录,这里就能找到分别代表真机和模拟器的库目录了:

ok,我们来说下为啥生成两个库文件,因为模拟器是在mac上面运行的,它的架构和ios是不一样的,我们可以用一个命令来查看下,用命令行工具到刚才的Products目录下,然后敲下面的命令:

lipo -info Release-iphonesimulator/MyLib/MyLib.framework/MyLib

显示的信息是这样的:

Architectures in the fat file: Release-iphonesimulator/MyLib/MyLib.framework/MyLib are: i386 x86_64

同样的命令,真机的那个库再敲一遍:

lipo -info Release-iphoneos/MyLib/MyLib.framework/MyLib
Architectures in the fat file: Release-iphoneos/MyLib/MyLib.framework/MyLib are: armv7 arm64

显示的结果和模拟器那个不一样,模拟器的架构是i386x86_64 ,而真机的架构是 armv7arm6 ,所以我们需要合并一下。合并也是敲一个命令:

lipo -create Release-iphoneos/MyLib/MyLib.framework/MyLib Release-iphonesimulator/MyLib/MyLib.framework/MyLib -output MyLib

这样就会生成一个合并后的MyLib文件,这时再把随便哪个MyLib.framework库拷贝出来,然后右键点击选open in new tab,把里面的那个MyLib文件用新生成的那个替换掉就OK了。 这个新的MyLib.framework库文件就可以拿给别人用了,这样别人无论是真机还是模拟器都可以使用我们开发的这个静态库了。