“为 iOS 构建,但嵌入式框架 'xxx.framework' 是为 iOS + iOS 模拟器构建的”

sko*_*man 22 ios xcode12

升级到 Xcode 12.3 时,出现错误:

Building for iOS, but the embedded framework 'opus.framework' was built for iOS + iOS Simulator
Run Code Online (Sandbox Code Playgroud)

但更新前一切正常。

小智 10

Xcode 构建设置

尝试将“构建设置”中“构建选项”的“验证工作区”设置为“是”可能会有所帮助。


gch*_*ita 4

编辑:这是一个可以帮助那些使用迦太基的人的观察。

\n

显然,这个答案中描述的这个问题的最流行的解决方案。

\n
\n

在“构建设置”选项卡中将“验证工作区”设置为“是”

\n
\n

另外,对这个答案的观察是正确的

\n
\n

恐怕这实际上是正确的错误,框架不应该同时包含 iOS 和 iOS Simulator 代码。Apple\n试图强迫我们使用 XCFramework 来实现此目的。他们在 XCode 11 中启动了它并加强了限制。

\n
\n

在即将到来的 Xcode 版本中,所有其他解决方案(除了 xcframework 使用之外)似乎都变得越来越临时。

\n
\n

如果您使用Carthage并且添加了带有Embed & Sign.

\n

在此输入图像描述

\n

为了使其正常工作,您必须遵循迦太基页面提供的步骤:

\n
\n

如果您正在为 iOS、tvOS 或 watchOS 进行构建

\n
    \n
  1. 创建一个 Cartfile,其中列出您\xe2\x80\x99d 喜欢在项目中使用的框架。

    \n
  2. \n
  3. 跑步carthage update。这会将依赖项提取到 Carthage/Checkouts 文件夹中,然后构建每个依赖项或下载\n预编译的框架。

    \n
  4. \n
  5. 打开应用程序的“targets\xe2\x80\x99常规设置”选项卡。对于 Xcode 11.0 及更高版本,在“框架、库和嵌入式内容”部分中,从磁盘上的\nCarthage/Build 文件夹中拖放要使用的每个框架。然后,在“嵌入”部分中,\n从下拉菜单中为添加的每个项目选择“不嵌入”。对于\nXcode 10.x 及更低版本,在“链接的框架和库”\n部分中,从磁盘上\nCarthage/Build 文件夹中拖放要使用的每个框架。

    \n
  6. \n
  7. 在应用程序的 Targets\xe2\x80\x99 Build Phases设置选项卡上,单击+图标并选择New Run Script Phase。创建一个运行脚本,在其中指定您的 shell(例如:/bin/sh),将以下\n内容添加到 shell 下面的脚本区域:

    \n
    /usr/local/bin/carthage copy-frameworks\n
    Run Code Online (Sandbox Code Playgroud)\n
  8. \n
  9. 创建一个名为 的文件input.xcfilelist和一个名为output.xcfilelist

    \n
  10. \n
  11. 将您要使用的框架的路径添加到您的input.xcfilelist. 例如:

    \n
    $(SRCROOT)/Carthage/Build/iOS/Result.framework\n$(SRCROOT)/Carthage/Build/iOS/ReactiveSwift.framework\n$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework\n
    Run Code Online (Sandbox Code Playgroud)\n
  12. \n
  13. 将复制的框架的路径添加到output.xcfilelist. 例如:

    \n
    $(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Result.framework\n$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveSwift.framework\n$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveCocoa.framework\n
    Run Code Online (Sandbox Code Playgroud)\n

    通过与输入文件一起指定输出文件,Xcode 仅在输入文件发生更改或输出文件丢失时才需要运行脚本。这意味着当您没有使用 Carthage 重建框架时,脏构建会更快。

    \n
  14. \n
  15. 添加input.xcfilelist到 Carthage 运行脚本阶段的“输入文件列表”部分

    \n
  16. \n
  17. 添加output.xcfilelist到 Carthage 运行脚本阶段的“输出文件列表”部分

    \n
  18. \n
\n
\n

也许这也是对其他情况的临时修复。(不是使用 Carthage 构建的依赖项)

\n

  • 我遇到了 OP 的问题,但我使用的是 CocoaPods 而不是 Carthage (2认同)

归档时间:

查看次数:

4975 次

最近记录:

4 年,6 月 前