升级到 Xcode 12.3 时,出现错误:
Building for iOS, but the embedded framework 'opus.framework' was built for iOS + iOS Simulator
Run Code Online (Sandbox Code Playgroud)
但更新前一切正常。
编辑:这是一个可以帮助那些使用迦太基的人的观察。
\n显然,这个答案中描述的这个问题的最流行的解决方案。
\n\n\n在“构建设置”选项卡中将“验证工作区”设置为“是”
\n
另外,对这个答案的观察是正确的
\n\n\n恐怕这实际上是正确的错误,框架不应该同时包含 iOS 和 iOS Simulator 代码。Apple\n试图强迫我们使用 XCFramework 来实现此目的。他们在 XCode 11 中启动了它并加强了限制。
\n
在即将到来的 Xcode 版本中,所有其他解决方案(除了 xcframework 使用之外)似乎都变得越来越临时。
\n如果您使用Carthage并且添加了带有Embed & Sign.
为了使其正常工作,您必须遵循迦太基页面提供的步骤:
\n\n\n如果您正在为 iOS、tvOS 或 watchOS 进行构建
\n\n
\n- \n
创建一个 Cartfile,其中列出您\xe2\x80\x99d 喜欢在项目中使用的框架。
\n- \n
跑步
\ncarthage update。这会将依赖项提取到 Carthage/Checkouts 文件夹中,然后构建每个依赖项或下载\n预编译的框架。- \n
打开应用程序的“targets\xe2\x80\x99常规设置”选项卡。对于 Xcode 11.0 及更高版本,在“框架、库和嵌入式内容”部分中,从磁盘上的\nCarthage/Build 文件夹中拖放要使用的每个框架。然后,在“嵌入”部分中,\n从下拉菜单中为添加的每个项目选择“不嵌入”。对于\nXcode 10.x 及更低版本,在“链接的框架和库”\n部分中,从磁盘上\nCarthage/Build 文件夹中拖放要使用的每个框架。
\n- \n
在应用程序的 Targets\xe2\x80\x99 Build Phases设置选项卡上,单击+图标并选择New Run Script Phase。创建一个运行脚本,在其中指定您的 shell(例如:
\n/bin/sh),将以下\n内容添加到 shell 下面的脚本区域:Run Code Online (Sandbox Code Playgroud)\n/usr/local/bin/carthage copy-frameworks\n- \n
创建一个名为 的文件
\ninput.xcfilelist和一个名为output.xcfilelist- \n
将您要使用的框架的路径添加到您的
\ninput.xcfilelist. 例如:Run Code Online (Sandbox Code Playgroud)\n$(SRCROOT)/Carthage/Build/iOS/Result.framework\n$(SRCROOT)/Carthage/Build/iOS/ReactiveSwift.framework\n$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework\n- \n
将复制的框架的路径添加到
\noutput.xcfilelist. 例如:Run Code Online (Sandbox Code Playgroud)\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通过与输入文件一起指定输出文件,Xcode 仅在输入文件发生更改或输出文件丢失时才需要运行脚本。这意味着当您没有使用 Carthage 重建框架时,脏构建会更快。
\n- \n
添加
\ninput.xcfilelist到 Carthage 运行脚本阶段的“输入文件列表”部分- \n
添加
\noutput.xcfilelist到 Carthage 运行脚本阶段的“输出文件列表”部分
也许这也是对其他情况的临时修复。(不是使用 Carthage 构建的依赖项)
\n| 归档时间: |
|
| 查看次数: |
4975 次 |
| 最近记录: |