2016-09-13 102 views
0

的时候我不能告诉如果这是我的配置问题(可能)或Xcode中8的bug(也有可能),以嘉奖我的目标平台。的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检查。更好的是,当我按cmd-TARGET_OS_OSX时,它将我带到macOS 10.12 TargetConditionals.h文件的行#define TARGET_OS_OSX 1。那么为什么它失败了?

我的问题:

  1. 什么控制其TargetConditionals.h文件(即:iOS或MacOS之外)的Xcode编译时选择?我这纯粹是基于其设备在我的计划/设备选择器所选择的假设下,和现有设备的列表是基于构建设置 - >支持的平台给定目标。对?

  2. 是Xcode的建设我的项目不同于文本编辑器自动完成(即:CMD单击支持)是导致我相信吗?

  3. 我应该做这个不同的方式?

回答

0

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

尝试用户定义的宏或使用以下。

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

它**是**定义的,但我没有使用''#ifdef'''。我使用''if #'''来评估它是真是假。另外,你可能会想到'''TARGET_OS_MAC'''在Mac和iOS上都被定义为TRUE,但是'''TARGET_OS_OSX''是不同的。 –

+0

对不起,我误读了TARGET_OS_ *。任何你不想使用TARGET_OS_IPHONE ||的理由TARGET_IPHONE_SIMULATOR? – kthorat

+0

至少在我的情况下,iPhone,AppleTV,Apple手表和相应的模拟器都使用相同的代码。 Mac是唯一的区别。但除此之外,它仍然没有解决问题,因为问题不是我选择哪个常量 - 它选择哪个头文件来定义这些常量。 –