是否有一个#定义在iPhone SDK中为哪个活动SDK编译?

是否有一个#定义在iPhone SDK中为哪个活动SDK编译?,iphone,Iphone,我希望能够在编译时判断我是为iPhoneSDK 2.x还是3.x编译,因此如果需要,我可以省略一些位(例如MapKit、GameKit)。目前,我正在使用自定义的#define来完成这项工作。我想知道是否有一种方法可以从活动SDK自动检测到这一点?我知道TARGET_OS_IPHONE和TARGET_IPHONE_SIMULATOR以及TargetConditionals.h,但找不到任何与活动SDK相关的信息。请查看Availability.h(和Availability internal.h

我希望能够在编译时判断我是为iPhoneSDK 2.x还是3.x编译,因此如果需要,我可以省略一些位(例如MapKit、GameKit)。目前,我正在使用自定义的#define来完成这项工作。我想知道是否有一种方法可以从活动SDK自动检测到这一点?我知道TARGET_OS_IPHONE和TARGET_IPHONE_SIMULATOR以及TargetConditionals.h,但找不到任何与活动SDK相关的信息。

请查看Availability.h(和Availability internal.h)。这里定义了
\uIphone\uOS\uVersion\uMin\uRequired
,以及SDK版本的常量

Martijn是正确的:u IPHONE_OS_VERSION_MIN_REQUIRED是部署目标。当前的基本SDK是uu IPHONE u OS u版本u MAX u必需的


如果您试图使用此功能来确定代码运行的设备上有哪些可用功能,则不能使用编译时宏,您需要使用运行时功能检测。

如果您想检查是否正在使用特定(或更高)版本的SDK,可以检查一些定义

例如,如果您有一些代码仅在使用iOS 6.0或更高版本SDK时才需要编译,则可以使用以下方法:

#ifdef __IPHONE_6_0
    // Some iOS 6 code
#endif

这实际上会告诉iOS部署目标OS版本,而不是当前的基本SDK。无法这样做,因为SDK的标头通常会包含为下一个版本定义的,例如iOS 9.3 SDK defines
\uU IPHONE\u 10\u 0