为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
二进制文件具有拱门armv7
,arm64
,i386
,x86_64
。但是当它链接到我的应用程序时,它既可以用于iphoneos,也可以仅用于iphonesimulator,但不能同时用于两者。
由于我的应用程序在为模拟器构建和使用模拟器框架时工作,并且它也适用于构建iphoneos和iphoneos框架,我相信我的代码很好,所有符号都在那里。
当我使用通用框架时,似乎Xcode没有为两个平台之一找到任何符号。我认为它可能与Info.plist
(有#34;支持的平台"字段并且我不适应通用设置)有关,但完全删除{{1}没有解决问题。
是否有文档在某处解释xcode对通用框架的期望?我理解我需要胖胖二进制文件中的所有4个arch,但没有人提到Info.plist
,我没有找到任何解释Xcode如何使用通用框架的文档。
答案 0 :(得分:0)
我意识到不同架构实际上有不同的Swift子模块,所以需要独立复制它们:
cp -r Debug-iphoneos/foo.framework/Modules/foo.swiftmodule/* <universal_foo.framework>/Modules/foo.swiftmodule/
我假设它们对于所有架构都是相同的,导致其中一些架构缺乏我的通用框架&#34;这解释了为什么它们被忽略了。