【问题标题】:What exactly do the "Architectures" & "valid architectures" options in Xcode mean, and what should I set for iOS projects?Xcode 中的“架构”和“有效架构”选项到底是什么意思,我应该为 iOS 项目设置什么?
【发布时间】:2014-03-05 23:08:13
【问题描述】:

我使用跨平台代码,这意味着我必须为 iOS 构建开源 C++ 项目才能在我的 iOS 应用程序中使用它们。有时我必须构建自己的项目,有时我会得到一个不错的 CMake 设置,但似乎没有两个项目在这两个字段上具有完全相同的设置。

有些是“armv7”,有些是“armv7 armv7s”,还有一些是“armv7 armv7s arm64”。我知道“armv7”是指特定一代的设备硬件。但这是否意味着如果我只设置“armv7”,我的应用程序将无法在 armv7s 或新的 64 位 iPad 上运行?这些多种架构是否像拥有胖库一样,每个架构都有单独的副本?

然后对于“架构”,还有更多选项。诸如“标准架构(armv7,armv7s)”之类的选项以及诸如“$(ARCHS_STANDARD_32_64_BIT)”之类的其他选项。我经常发现必须更改这些内容才能构建内容,而不会出现关于 i386 的错误。事实上,一个 iOS 项目实际上是为 Intel(模拟器)和 Arm 构建的,这让我更加困惑。

比起“使用此设置”的答案,我真的在寻求更高层次的解释。我想确信我的应用程序可以在预期的设备上运行,因为我买不起现在存在的所有不同版本的 iPad。作为参考,我想支持 iPad 2 及更高版本,并且只支持 iOS 6/7。

【问题讨论】:

  • 没有人真正知道。你只是乱搞设置,直到它起作用。

标签: ios xcode


【解决方案1】:

这些是不同的指令集。如果您正在构建库,则需要构建下游应用程序所需的所有不同指令集/架构,否则在尝试构建应用程序时会出现链接器错误。

这被模拟器复杂化了,它需要 Intel x86 或 x86_64 而不是 ARM。

根据您的选择,编译器将创建包含多个架构的胖库。

运行时不同指令集之间存在一些兼容性(例如,32bit will run on 64bit),但这在链接期间无济于事。如果您正在编译 64 位,那么您所包含的库将需要 64 位。

所以为devices you're targeting 设置了简短的答案。例如。你可能不再需要 armv6 了。

【讨论】:

  • 这是否意味着如果我在 appstore 中有一个使用“armv7 armv7s”构建的应用程序,它就无法在 arm64 的新 iPad Air 上运行?当然,应用商店中的任何应用都可以在未来的设备上运行,而无需重新构建?或者,Apple 是否会删除所有添加到其商店的针对 iOS6 SDK 构建的应用程序,而这些应用程序尚未重新提交?这就是我的困惑......
  • 另外 - 我仍然不明白为什么需要两个设置以及它们之间的关系。
  • 不,arm64 设备将运行使用 32 位指令集构建的应用程序(请参阅我的答案中的第一个链接)。两种设置?见stackoverflow.com/questions/12701188/…
猜你喜欢
  • 2018-06-22
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
相关资源
最近更新 更多