Platform macros 不同平台的宏命令
下面我列举了一些很有用的宏命令,在将来的工作中你可能会用到它们。我们先来看一看让程序在不同平台运行的宏命令:
- TARGET_OS_IPHONE: 应用将在 iPhone 上运行
- TARGET_OS_IOS: 应用将在 iOS 上运行
- TARGET_OS_MAC: 应用将在 OS X 上运行
- TARGET_OS_WATCH and TARGET_OS_TV: 应用将在 watchOS 或 tvOS 上运行
- TARGET_OS_SIMULATOR: 应用将在模拟器上运行
我们先来看这些 OS,它们的关系可能和你想的不大一样。记住 iOS 是基于 OS X 的,而 tvOS 和 watchOS 是基于 iOS 的,所以选择的时候要小心哟,具体可以这样做:
- 如果你想要做一个 OS X 软件,就把 TARGET_OS_MAC 设为 1,别的设为为 0。
- 如果你想要做一个 iOS 软件,就把 TARGET_OS_MAC,TARGET_OS_IPHONE 和 TARGET_OS_IOS 设为 1。
- 如果你想要做一个 tvOS 软件,就把 TARGET_OS_MAC,TARGET_OS_IPHONE 和 TARGET_OS_TV 设为 1。
- 如果你想要做一个 watchOS 软件,就把 TARGET_OS_MAC,TARGET_OS_IPHONE 和 TARGET_OS_WATCH 设为 1。
所以总结一下,TARGET_OS_MAC 是永远会被设定为 1 的。无论你想做 iOS,tvOS 还是 watchOS 软件,TARGET_OS_IPHONE 也都是 1。除此之外,当你想做 tvOS 的软件就把 TARGET_OS_TV 设为 1,想做 watchOS 的软件就把 TARGET_OS_WATCH 设为 1。如果你想要同时在 OS X 和基于 iOS 的所有平台上运行代码的话,你要检查 TARGET_OS_IPHONE 这个选项。
举个例子,苹果是这么定义 SpriteKit 里的 SKColor 的:
#if TARGET_OS_IPHONE
#define SKColor UIColor
#else
#define SKColor NSColor
#endif
在 iOS 平台上面,它是用 UIColor 写的,但是在别的平台是用 NSColor 写的,开发者可以在任意开发平台使用这个方法。
除此之外呢,还有 TARGET_OS_SIMULATOR,这基于你是否想在模拟器上运行程序。我觉得这个还是非常有用的,你可以直接在 MAC 上模拟运行情况。