我正在开发一个包含共享代码的 Mac 应用程序和 iPad 应用程序的项目。如何使用条件编译开关从 iPhone 项目中排除特定于 Mac 的代码,反之亦然?我注意到TARGET_OS_IPHONE
andTARGET_OS_MAC
都是 1,所以它们总是正确的。是否有另一个我可以使用的开关,它只会在为特定目标编译时返回 true?
在大多数情况下,我已经通过移动#include <UIKit/UIKit.h>
并#include <Cocoa/Cocoa.h>
进入两个项目的预编译头文件来使文件进行协作。我正在共享模型和一些从 RSS 提要和 Evernote 获取数据的实用程序代码。
特别是,与[NSData dataWithContentsOfURL:options:error:]
iOS 4 和 Mac OS 10.6 相比,该函数为选项参数 iOS 3.2 和更早版本以及 Mac OS 10.5 和更早版本采用不同的常量。我使用的条件是:
#if (TARGET_OS_IPHONE && (__IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_3_2)) || (TARGET_OS_MAC && (MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5))
这似乎可行,但我想确保这是防弹的。我的理解是,如果 Mac 版本设置为 10.6,而 iOS 版本设置为 3.2,即使是为 iOS 3.2 编译,它仍然会使用新的常量,这似乎不正确。
提前感谢您的帮助!