Xcode 7:为每个架构设置预处理器宏

Xcode 7: Set Preprocessor Macros per architecture

我需要在 Xcode 中设置 Preprocessor Macro 只是为了特定的体系结构 (arm64)。我怎样才能做到这一点?

Whosebug 上也有类似的问题:。 但就我而言 Xcode 7 就是不允许我选择架构。在 Xcode 版本 7.1.17.3.1 上尝试了相同的结果:Xcode 提供的唯一体系结构选项是“*”(见下图)。 Preprocessor settings section

以防万一,这是我的架构设置: Architectures settings section

为了让您更好地理解我为什么需要这个: 我使用依赖于标志集的第 3 方 C 库来告诉它它在 32 位或 64 位平台上是 运行 。 库集成指南中的注释:“为 64 位架构构建时,必须在 Xcode 的预处理器宏部分添加 _64BIT 宏。”

所以这是我尝试过的:

你知道我的 Xcode 设置有什么问题吗,为什么它不在 Preprocessor 部分显示体系结构选项?或者在我的情况下还有其他配置宏的方法吗?

我终于想通了。

取得的结果: _64BIT 宏将在预处理期间添加到每个(至少今天已知的)64 位环境,无论它是 64 位设备的模拟器或真正的 64 位设备。

解决办法是手动编辑.pbxproj-file如下:

            GCC_PREPROCESSOR_DEFINITIONS = (
                "DEBUG=1",
                "$(inherited)",
            );
            "GCC_PREPROCESSOR_DEFINITIONS[arch=arm64]" = (
                "$(inherited)",
                _64BIT,
            );
            "GCC_PREPROCESSOR_DEFINITIONS[arch=x86_64]" = (
                "$(inherited)",
                _64BIT,
            );

这里是调试配置:

  • 第一部分定义了适用于所有架构的默认宏;
  • 第二个和第三个定义了仅适用于特定架构的自定义宏。

然后您手动完成的更改将在预处理器设置编辑器中可见。 看起来确实像编辑器中 Xcode 中的错误。

您可以注意到我在发布问题之前已经尝试过这种方法,但是我误解了我尝试的结果。问题是我已经在模拟器上测试了我的应用程序,并且在真实设备和相应的模拟器上的架构是不同的。我已将宏配置为包含在 arm64 架构中,但模拟器的实际架构是 x86_64.

为了进一步参考,this 文章解释了每种架构实际发生的位置:

  • arm7:用在最早的iOS 7-supporting devices
  • arm7s:用于 iPhone 5 和 5C
  • arm64:对于 iPhone 5S 中的 64 位 ARM 处理器 [ 我相信更新的 iPhones][=40 也是如此=]
  • i386: 对于 32 位模拟器
  • x86_64:在64位模拟器中使用

对于 i386 和 x86_64 "bitness" 的模拟设备是隐含在这里,而不是你的 Mac 的。