通用框架:Xcode无法识别的平台

时间:2018-03-24 10:31:35

标签: ios xcode

摘要

为iphoneos和iphonesimulator创建一个带lipo的通用框架时,似乎链接框架的应用程序找不到其中一个平台。我不确定Xcode如何与通用框架协同工作。

我的设置

我有一个框架的Xcode项目和一个应用程序。

我可以为" iphoneos"构建我的框架。平台(拱门:armv7 arm64),并将其链接到我为iphoneos构建的应用程序中。

我还可以为" iphonesimulator"构建我的框架。平台(拱门:i386 x86_64),并将其链接到我为iphonesimulator构建的应用程序中。

现在,我想用它制作一个通用框架(即我想只有一个iphoneos和iphonesimulator的框架。鉴于我的框架foo.framework,我做了类似的事情:

cp -r Debug-iphoneos/foo.framework .
rm foo.framework/foo
lipo Debug-iphoneos/foo.framework/foo Debug-iphonesimulator/foo.framework/foo -create -output foo.framework/foo

它会产生一个框架,其中foo二进制文件具有拱门armv7arm64i386x86_64。但是当它链接到我的应用程序时,它既可以用于iphoneos,也可以仅用于iphonesimulator,但不能同时用于两者。

由于我的应用程序在为模拟器构建和使用模拟器框架时工作,并且它也适用于构建iphoneos和iphoneos框架,我相信我的代码很好,所有符号都在那里。

当我使用通用框架时,似乎Xcode没有为两个平台之一找到任何符号。我认为它可能与Info.plist(有#34;支持的平台"字段并且我不适应通用设置)有关,但完全删除{{1}没有解决问题。

是否有文档在某处解释xcode对通用框架的期望?我理解我需要胖胖二进制文件中的所有4个arch,但没有人提到Info.plist,我没有找到任何解释Xcode如何使用通用框架的文档。

1 个答案:

答案 0 :(得分:0)

我意识到不同架构实际上有不同的Swift子模块,所以需要独立复制它们:

cp -r Debug-iphoneos/foo.framework/Modules/foo.swiftmodule/* <universal_foo.framework>/Modules/foo.swiftmodule/

我假设它们对于所有架构都是相同的,导致其中一些架构缺乏我的通用框架&#34;这解释了为什么它们被忽略了。