我应该在“架构”部分的 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
用于模拟器。其余的可以保留默认值。
更新: 无需提及桌面架构(i386
、x86_64
)即可支持 iOS 模拟器的构建。只需包含相应的 ARM 架构即可支持 Given Simulator。因此,如果只填充armv7 armv7s arm64
,Architectures
就可以了。通过观察,从 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”