封装静态库framework时遇到的一个问题

封装静态库后,会生成三个文件夹:
Debug-iphonesimulator
Release-iphoneos
Release-iphonesimulator


生成的文件.png

选择哪个导入到项目里,就显得无从下手。
如果我们选择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.

很多文章的解决办法是更改编译配置:


错误的方式.png

虽然可以编译通过,但是会出现一个警告:

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文件,你的静态库就会同时支持模拟器和真机了。

你可能感兴趣的:(封装静态库framework时遇到的一个问题)