在构建时,Xcode 8似乎并不尊重我的目标平台

时间:2016-09-13 00:26:19

标签: ios objective-c xcode macos xcode8

我无法判断这是否是我的配置问题(可能)或Xcode 8的错误(也可能)。

我正在努力将iOS框架HLSpriteKit移植到Mac上。因为项目中有几个特定于iOS的文件,现在是一个特定于Mac的文件,我选择创建两个单独的目标,一个用于iOS,一个用于macOS。

enter image description here

对于共享代码,我想使用#if TARGET_OS_OSX来定位macOS,并#else用于其他所有内容:

enter image description here

当我尝试使用我的iOS目标构建它时,效果很好。但是当我尝试使用Mac目标进行构建时(如截图左上角所示),它会失败。即使我正在为Mac构建,它似乎也未能通过#if TARGET_OS_OSX检查。更好的是,当我单击TARGET_OS_OSX时,它会转到带有行#define TARGET_OS_OSX 1的macOS 10.12 TargetConditionals.h文件。那为什么会失败?

我的问题:

  1. 在编译时,Xcode选择哪个TargetConditionals.h文件(即:iOS或macOS)?我的假设是纯粹基于我在Scheme / Device选择器中选择的设备,可用设备列表基于 Build Settings - >支持的平台,用于给定目标。右

  2. Xcode是否构建我的项目与文本编辑器自动完成(即:cmd-click支持)让我相信?

  3. 我应该采用不同的方式吗?

1 个答案:

答案 0 :(得分:0)

它不起作用,因为TARGET_OS_OSX也是为iOS定义的。

尝试用户定义的MACRO或使用以下内容。

#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
   // iOS code here
#else
   // OS X code here
#endif