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

我需要在Xcode为特定架构设置Preprocessor Macro (arm64)。 我怎样才能做到这一点?

Stackoverflow上有类似的问题: Xcode 6:为每个架构设置预处理器宏 。 但在我看来, Xcode 7并没有让我选择架构。 尝试使用Xcode版本7.1.17.3.1 ,结果相同:Xcode提供的唯一架构选项是“*”(见下图)。 预处理器设置部分

以防这里是我的架构设置: 架构设置部分

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

所以这就是我尝试过的:

  • 找到一种在Xcode UI中设置特定于体系结构的宏的方法(如上所述)
  • 通过用GCC_PREPROCESSOR_DEFINITIONS [arch = arm64]替换GCC_PREPROCESSOR_DEFINITIONS [arch = *]手动修改.pbxproj文件(没有给出预期的效果)

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

最后我发现了。

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

解决方案是手动编辑.pbxproj文件,如下所示:

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

所以这是debug-config:

  • 第一部分定义了适用于所有体系结构的默认宏;
  • 第2和第3个定义自定义宏,仅适用于特定体系结构。

然后,在预处理器设置编辑器中可以看到您手动完成的更改。 它在编辑器中看起来像Xcode中的bug。

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

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

  • arm7:用于最老的iOS 7支持设备
  • arm7s:用于iPhone 5和5C
  • arm64:适用于iPhone 5S中的64位ARM处理器[ 我认为同样适用于较新的iPhone ]
  • i386:用于32位模拟器
  • x86_64:用于64位模拟器

对于i386和x86_64,这里暗示了模拟设备的“位数”,而不是你的Mac。