似乎无法有条件地为iPhone / Mac编译

时间:2012-03-30 18:56:59

标签: iphone xcode macos macros

我有这个来源(xcode 3.2.5):

NSLog(@"IPHONE = %d, SIMULATOR = %d, MAC = %d", TARGET_OS_IPHONE, TARGET_IPHONE_SIMULATOR, TARGET_OS_MAC);

我得到了这个结果:

2012-03-30 13:50:06.777 MyApp[36810:207] IPHONE = 1, SIMULATOR = 1, MAC = 1

难怪我的#if陈述混淆了!

是什么给出的?有什么想法吗?

FWIW :开启(系留)iPod Touch我得到了这个:IPHONE = 1, SIMULATOR = 0, MAC = 1

已添加:嗯,我发现我#if的原始问题是由于TARGET_OS_IPHONETARGET_OS_PHONE拼错了几个地方。 (好的'复制/粘贴!)

仍然希望找到关于如何设置Apple定义的明确描述。

2 个答案:

答案 0 :(得分:3)

使用TARGET_OS_IPHONE(仅限!)来区分iOS和OSX。

#if TARGET_OS_IPHONE
// iOS
#else
// Mac OS X
#endif
在OSX和iOS上,

TARGET_OS_MAC将为1;它早于iOS,就TargetConditionals.h而言,iOS被认为是OSX的变体。

答案 1 :(得分:0)

我可能在这里错了,但我的假设是TARGET_OS_MAC指定你正在为Mac OS X构建(而不是win32)。 iOS实际上是Mac OS X的一个版本(尽管它没有这样的品牌/营销)。

要查看它们是如何定义的,请选择构建目标并在xcode中单击其定义。

在头文件中,宏定义如下:

TARGET_OS_MAC           - Generate code will run under Mac OS
TARGET_OS_WIN32         - Generate code will run under 32-bit Windows
TARGET_OS_UNIX          - Generate code will run under some non Mac OS X unix 
TARGET_OS_EMBEDDED      - Generate code will run under an embedded OS variant
                          of TARGET_OS_MAC
TARGET_OS_IPHONE        - Generate code will run under iPhone OS which 
                          is a variant of TARGET_OS_MAC.

因此,可以预期为iOS定义TARGET_OS_MAC,例如TARGET_OS_IPHONE