【问题标题】:Universal framework: platform not recognized by Xcode通用框架:Xcode 无法识别的平台
【发布时间】: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 二进制文件具有拱门armv7arm64i386x86_64。但是当将它链接到我的应用程序时,它要么仅适用于 iphoneos,要么仅适用于 iphonesimulator,但不能同时适用。

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

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

是否有文档解释 xcode 对通用框架的期望?我知道我需要一个胖二进制文件中的所有 4 个拱门,但没有人提到 Info.plist,而且我没有找到任何解释 Xcode 如何使用通用框架的文档。

【问题讨论】:

    标签: ios xcode


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-22
      • 2014-02-24
      相关资源
      最近更新 更多