【发布时间】:2018-03-24 10:31:35
【问题描述】:
总结
使用lipo 为 iphoneos 和 iphonesimulator 创建通用框架时,链接框架的应用似乎找不到其中一个平台。我不确定 Xcode 如何与通用框架一起工作。
我的设置
我有一个框架的 Xcode 项目和一个应用程序。
我可以为“iphoneos”平台构建我的框架(archs:armv7arm64),并将其链接到我为 iphoneos 构建的应用程序中。
我还可以为“iphonesimulator”平台构建我的框架(archs:i386x86_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 相关(具有“支持的平台”字段并且我不适应通用设置),但完全删除 Info.plist 并不能解决问题。
是否有文档解释 xcode 对通用框架的期望?我知道我需要一个胖二进制文件中的所有 4 个拱门,但没有人提到 Info.plist,而且我没有找到任何解释 Xcode 如何使用通用框架的文档。
【问题讨论】: