封装静态库后,会生成三个文件夹:
Debug-iphonesimulator
Release-iphoneos
Release-iphonesimulator
选择哪个导入到项目里,就显得无从下手。
如果我们选择Release-iphoneos,在模拟器运行,就会报错:
Building for iOS Simulator, but the linked framework 'x.framework' was built for iOS.
如果我们选择Release-iphonesimulator,在模拟器运行,就会报错:
Building for iOS, but the linked framework 'x.framework' was built for iOS Simulator.
很多文章的解决办法是更改编译配置:
虽然可以编译通过,但是会出现一个警告:
ignoring file x/x/x missing required architecture x86_64 in file x/x/x (2 slices)
这个警告也是告诉你只支持真机,不支持模拟器,不要再试图解决这个警告了,因为一开始就错了。
我们要的,是一个既支持真机也支持模拟器运行的framework,关键点就在于framework里面的空白文件,例如你的framework叫“ABC.framework”,那么你会在framework里面看到一个叫ABC的空白文件,我们接下来就需要搞一下它。
首先介绍两个命令行:
lipo -i xxx.a
lipo -create x/x/x x/x/x -output x/x/x
第一个命令表示查看库文件包含的CPU架构:
Architectures in the fat file: x/x/x are: armv7 arm64
Architectures in the fat file: x/x/x are: i386 x86_64
上面的两个输出分别表示支持真机和模拟器
第二个命令的作用是合成一个库的两个不同CPU架构的库文件为一个,比如我们的ABC.framework
lipo -create {真机文件目录/ABC} {模拟器文件目录/ABC} -output ABC
那么在你的目录下就会多一个ABC文件,这就是合并后的文件,你只需要替换掉Release-iphoneos或者Release-iphonesimulator里面ABC.framework下面的ABC为合并后的ABC文件,你的静态库就会同时支持模拟器和真机了。