通用框架:Xcode 无法识别的平台
Posted
技术标签:
【中文标题】通用框架:Xcode 无法识别的平台【英文标题】:Universal framework: platform not recognized by Xcode 【发布时间】:2018-03-24 10:31:35 【问题描述】:总结
使用lipo
为 iphoneos 和 iphonesimulator 创建通用框架时,链接框架的应用似乎找不到其中一个平台。我不确定 Xcode 如何与通用框架一起工作。
我的设置
我有一个框架的 Xcode 项目和一个应用程序。
我可以为“iphoneos”平台构建我的框架(archs:armv7
arm64
),并将其链接到我为 iphoneos 构建的应用程序中。
我还可以为“iphonesimulator”平台构建我的框架(archs: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
相关(具有“支持的平台”字段并且我不适应通用设置),但完全删除 Info.plist
并不能解决问题。
是否有文档解释 xcode 对通用框架的期望?我知道我需要一个胖二进制文件中的所有 4 个拱门,但没有人提到 Info.plist
,而且我没有找到任何解释 Xcode 如何使用通用框架的文档。
【问题讨论】:
【参考方案1】:我意识到不同的架构实际上有不同的 Swift 子模块,所以它们需要独立复制:
cp -r Debug-iphoneos/foo.framework/Modules/foo.swiftmodule/* <universal_foo.framework>/Modules/foo.swiftmodule/
我假设它们对于所有架构都是相同的,导致其中一些在我的“通用框架”中缺乏,这解释了为什么它们被忽略了。
【讨论】:
以上是关于通用框架:Xcode 无法识别的平台的主要内容,如果未能解决你的问题,请参考以下文章
无法识别的属性“targetFramework”。请注意属性名称区分大小写。
Xcode - presentViewController NSInvalidArgumentException:无法识别的选择器发送到实例