我应该在“架构”部分的 Xcode 构建设置中包含啥

Posted

技术标签:

【中文标题】我应该在“架构”部分的 Xcode 构建设置中包含啥【英文标题】:What should I include in Xcode build settings in "Architectures" section我应该在“架构”部分的 Xcode 构建设置中包含什么 【发布时间】:2014-09-23 11:31:40 【问题描述】:

我们之前为通用 ios 应用程序支持 iOS 6 和 7(这意味着我们同时支持 iPhone 和 iPad)。现在,随着 iOS 8 的发布,我们必须支持 iOS 6、iOS 7 和 iOS 8。此外,我们必须扩展目标设备列表以支持 iPhone 6 和 iPhone 6 Plus。

另外,我们计划很快升级到 Xcode 6。因为 Apple 可能随时要求使用 Xcode 6 才能将应用程序提交到应用商店。

牢记以上所有要点,我很困惑 Xcode 构建设置中的架构设置应该是什么。主要是 Xcode Architectures 设置下有 3 个重要的项目。请看下面的截图。

我已经强调了 3 个重要参数。我想知道我应该为这些参数分配什么值以支持上述所有内容。任何帮助将不胜感激。我对此感到有些困惑。

另外,我想知道是否需要更改任何其他内容才能迁移到 Xcode 6 和 iOS 8。

【问题讨论】:

【参考方案1】:

Architectures 中,您可以使用armv7, armv7s, arm64, i386,其中i386 用于模拟器。其余的可以保留默认值。

更新: 无需提及桌面架构(i386x86_64)即可支持 iOS 模拟器的构建。只需包含相应的 ARM 架构即可支持 Given Simulator。因此,如果只填充armv7 armv7s arm64Architectures 就可以了。通过观察,从 Xcode 6.3 开始,如果设置包含任何桌面架构,它甚至可能导致构建失败。

Valid architectures 可以为每个目标单独设置,Xcode 将与全局Architectures 设置相交。如果您不感兴趣,请保持原样,Xcode 会自行处理,不会出现任何问题。

如果您的代码不支持 64 位,请从 Architectures 中删除 arm64。应用仍可在 iOS 8 和所有最新的 64 位设备上运行。

至于Build Active Architecture Only,我推荐设置为No。该属性会影响 Xcode 决定构建的内容,例如基于当前连接的设备。但它可能会出现问题:你最终可能会为某些目标构建不同的架构,从而导致链接错误。不过,如果您想使用该功能的优点,请将其设置为 Yes 仅用于 Debug 或某种仅用于测试的配置,而不是最终版本。 Xcode 将仅为您在 Architectures x Valid 中设置的所有架构之一构建所有二进制文件。

【讨论】:

我想要一个这样的解释性答案。谢谢!! 这是不正确的。您应该只包括 arm 架构。 Xcode 会将 32 位 arm 解释为 sim 的 i386,类似地将 arm64 解释为 x86_64 的 sim。 证明它。我完全使用我写的内容。 @lef,请考虑更新您的答案。因为我不确定它是否与您添加的 cmets 匹配。感谢您提供良好的解释性答案。当你这样做时,请在这里告诉我,否则我永远无法知道你已经更新了你的答案。 我的架构值正确,但是我将“仅构建活动架构”设置为“是”,并且似乎我在连接旧设备时存档了我的应用程序,这使得存档无法用于任何 64 位设备。将“仅构建活动架构”设置为 NO,然后重新归档解决了我的问题!【参考方案2】:

如果您不是目标架构方面的专家,请删除所有架构并添加 armv7 和 armv7s。此外,如果您只为 iOS 构建,请检查您的目标,以免 Xcode 构建其他操作系统(可能需要其他架构)。

【讨论】:

以上是关于我应该在“架构”部分的 Xcode 构建设置中包含啥的主要内容,如果未能解决你的问题,请参考以下文章

sdl 目标 c++ 和 xcode 在游戏中包含 sdl 框架

Copy Bundle Resources 构建阶段在 xcode 6 中包含此目标的 Info.plist 文件“Info.plist”吗?

如何在 XCode 3.2.5 项目中包含 Scintilla?

在 Hudson 的构建目标和标准发布方法中包含“mvn deploy”

xCode 7 错误:在 Google 地图的框架模块中包含非模块化标头

如何在 Xcode 中包含 <bits/stdc++>