我会在这里加上我的2美分(以一种不那么可怕的方式 :-)。我遇到过许多厂商提供的庞大库,它们(由于某种原因)不能像苹果公司文档中所述通过将它们添加到Frameworks
目录来正常工作。我们唯一能够使它们正常工作的方法是将.framekwork
直接拉入项目目录,并手动在构建设置中链接Embedded Frameworks
和Link Binary with Libraries
。这似乎可以正常工作而没有任何问题,但是,与任何庞大的库一样,它们附带了冗余的模拟器架构i386
和x86_64
以及arm
体系结构。
检查庞大库体系结构的快速方法是
$ cd 'Project_dir/Project'
$ lipo -info 'YourLibrary.framework/YourLibExec`
应该输出类似于这样的输出
Architectures in the fat file: YourLibrary.framework/YourLibExec are: i386 x86_64 armv7 arm64
这证实了在上传到iTunesConnect归档之前,您将需要从您的框架中剪裁掉i386和x86_64这两种不受iOS支持的架构。现在,所有的答案(或者至少有些答案)都提供了这些非常好用的运行脚本,但是只有当你的框架位于Frameworks
目录中时才适用。除非你是一个shell脚本迷,否则这些脚本在不作出修改的情况下,无法胜任我上面解释的情景。然而,有一种非常简单的方法可以从框架中删除i386和x86_64这些架构。
在项目目录中打开终端。
直接进入.framekwork所在目录,例如:
cd YourProjectDir/YourProject/YourLibrary.framework
运行如下命令序列:
$ mv YourLibrary YourLibrary_all_archs
$ lipo -remove x86_64 YourLibrary_all_archs -o YourLibrary_some_archs
$ lipo -remove i386 YourLibrary_some_archs -o YourLibrary
$ rm YourLibrary_all_archs YourLibrary_some_archs
这里需要注意几点 - 每次要移除一个体系结构,都必须使用lipo -remove
命令进行操作。 lipo
不会修改输入文件,它只会生成一个文件,因此您需要先为x86_64
和i386
分别运行一次lipo -remove
。上面的命令只是通过首先重命名可执行文件,然后最终删除所需的架构,并清理剩余文件来实现这一点。这样就可以在Application Loader归档上传到iTunesConnect时看到绿色的勾号了。
需要记住的事情: 上述步骤应该只在生产构建期间执行,因为模拟器结构将被剥离,因此,在模拟器上构建将停止工作(这是预期的)。在开发环境中,不应将.framework
文件中的架构剥离,因为您希望能够在模拟器和实际设备上进行测试。如果你的fat库驻留在项目的Frameworks
文件夹中,请参考接受的答案。