Xcode 7:为每个架构设置预处理器宏
我需要在Xcode
为特定架构设置Preprocessor Macro
(arm64)。 我怎样才能做到这一点?
Stackoverflow上有类似的问题: Xcode 6:为每个架构设置预处理器宏 。 但在我看来, Xcode 7
并没有让我选择架构。 尝试使用Xcode
版本7.1.1
和7.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。