Xcode 12以错误的顺序为模拟器构建目标?
我的项目总是在所有使用Xcode 11的设备上正确运行,但是在我安装了Xcode 12 beta 4之后,它无法在模拟器上构建 我比较了Xcode 11和Xcode 12的构建日志,在Xcode 12中,我的主要目标似乎是在cocoapods目标之前构建的,因此链接将失败,因为找不到cocoapods库 如何确定构建目标的顺序 在Xcode 11中,一切正常我自己的目标是在cocoapods目标之后建立的。 在Xcode 12中,构建是无序的我自己的目标是在cocoapods目标之前构建的。Xcode 12以错误的顺序为模拟器构建目标?,xcode,cocoapods,ios14,xcode12,Xcode,Cocoapods,Ios14,Xcode12,我的项目总是在所有使用Xcode 11的设备上正确运行,但是在我安装了Xcode 12 beta 4之后,它无法在模拟器上构建 我比较了Xcode 11和Xcode 12的构建日志,在Xcode 12中,我的主要目标似乎是在cocoapods目标之前构建的,因此链接将失败,因为找不到cocoapods库 如何确定构建目标的顺序 在Xcode 11中,一切正常我自己的目标是在cocoapods目标之后建立的。 在Xcode 12中,构建是无序的我自己的目标是在cocoapods目标之前构建的。
好的,我得到了一个解决方案,使构建工作(这种解决问题的方法是不正确的,正确的解决方法已添加到我的更新中): 1您需要将Pods项目作为外部项目添加到主项目中 2在主项目的构建阶段,明确地将所有CocodPod目标添加为依赖项 但我仍然认为xcode 12的新测试版可能会解决这个问题。因为它似乎是xcode 12的一个bug(我的项目在xcode 11和xcode 12+ios设备中工作得非常完美,仅在xcode 12+模拟器中失败) ###2020-08-17更新### 我找到了重现此问题的更确切原因,似乎我在xcode 12中打开的项目文件将在用户定义中自动生成一个有效的\u ARCHS宏,而此宏将使生成失败 我发现,使用这个宏,在构建链接的过程中,链接目标类型将是未知类型 “arm64-apple-ios11.0-simulator” 这会导致生成失败,并且只有在添加此宏时才会出现所有目标以错误顺序生成的问题
XcodeDefault.xctoolchain/usr/bin/clang -target arm64-apple-ios11.0-simulator
删除此有效的_ARCHS宏后,链接目标类型将为“x86_64-apple-ios11.0-simulator”,一切正常
XcodeDefault.xctoolchain/usr/bin/clang -target x86_64-apple-ios11.0-simulator
####2020-09-11添加苹果对该宏的反馈####
更新苹果对有效ARCH的反馈
- 在查看您的反馈后,我们有一些附加信息 给你:
- Xcode不会将有效的\u arch添加到项目中。事实上,我们建议 反对使用有效的拱门。也许是某个椰子荚把它放在你的 出于某种原因的项目?Cocoapod不是Xcode的一部分,所以我们不 对他们的行为有任何控制权 需要注意的一点是,在Xcode 11中,有效的_arch出现在 架构科。因为我们强烈建议不要这样做 使用它,它不再显示在那里,现在显示在用户界面中 定义的节(如果它已定义)
- Xcode 11用于自动转换arm64的建筑,用于 针对x86_64构建的模拟器,但现在arm64是一个有效的 模拟器架构(苹果硅架构),即 翻译不再发生
- 因此,我们怀疑您应该做的是从您的 项目,并确保将架构(ARCHS)设置为 标准体系结构(ARCHS_标准),而不是特定的 (除非您确实知道为什么不使用ARCHS_标准)
####2020年10月10日添加了end#####通过使用
$(ARCHS_标准)
不仅在架构设置中为ARCHS
而且在有效ARCHS
中,我能够在模拟器和设备上解决这个问题。我不确定以这种方式改变拱门可能有什么副作用,但到目前为止,我还没有遇到任何新的问题
详细信息:
@ximmyxiao的出色回答让我走上了正确的道路。然而,他提出的解决方案(移除有效的拱门)对我不起作用。这导致编译Pod目标时出现新问题(Pods脚本中的命令PhaseScriptExecution失败,退出代码为非零和ARCHS[@]:未绑定变量)
在有效的ARCH中将arm64
替换为x86\u 64
,解决了构建模拟器时的问题。似乎arm64
从来都不是一个正确的平台,而是由Xcode翻译成x86的。随着苹果宣布转向ARM处理器,这种翻译不再正确,因此必须使用正确的平台x86_64
关于苹果,不应再使用有效的拱门。但是,在构建设备时,此修复程序不起作用最终使用$(ARCHS_标准)
(模拟器和设备)在这两种情况下都成功了。
对遇到此类问题的其他人要有良好的评价。在Xcode 12.1版中,使用Xcode永远不会让人感到无聊。…
如果找不到有效的\u arch
在体系结构中添加**$(ARCHS_标准)x86_64 i386这三种体系结构将解决在模拟器和设备上运行、存档的问题。还建议将构建活动体系结构仅添加到“是”中 以下是对我有用的东西
从用户定义的设置中删除了有效的\u ARCHS
将ARCHS
设置为$(ARCHS\u标准)
为我的项目创建了一个新的.xcconfig
文件。(如果您已有一个,则可以跳过此选项)
将这些添加到我的.xcconfig
文件中
在那之后,我能够为模拟器和设备构建这两者。这里的想法是
EXCLUDED_ARCHS[sdk=iphoneos*] = x86_64
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64