是否有预处理器宏,仅当Base SDK为7.0或更高版本时才编译某些部分代码?“SDK”定义的常量似乎链接到iOS开发目标(而不是基础__IPHONE_7_0)。
我使用的是安装了iOS 7和iOS 6.1的XCode 5。
我问这个问题的原因是,我目前正在将一个应用程序从iOS 6过渡到iOS 7。有相当多的事情需要调整,目前我仍然希望使用iOS 6.1作为基础SDK (以及开发目标iOS 6.0)编译我的应用程序,但我已经想添加一些代码,这些代码在我使用iOS 7sdk编译时都会需要,但是如果基础SDK是iOS 6.1,这些代码就不会编译。
示例:
if ([_tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[_tableView setSeparatorInset:UIEdgeInsetsZero];
}上面这段代码不能使用iOS 6.1基础软件开发工具包编译,因为它抱怨setSeparatorInset没有为UITableView定义。因此,我希望将这段代码包含在预处理器指令中,有条件地包含在基础SDK中。
发布于 2013-11-05 21:29:56
你应该读一读苹果的SDK Compatibility Guide,里面解释了所有这些技术。
特别是,他们建议使用__IPHONE_OS_VERSION_MIN_REQUIRED宏对项目的部署目标(最低支持版本)进行测试,对于您的情况,建议使用 SDK 宏来测试用于编译的基础SDK。
示例:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
// Only COMPILE this if compiled against BaseSDK iOS7.0 or greater
if ([_tableView respondsToSelector:@selector(setSeparatorInset:)]) {
// Even when compiled with BaseSDK 7, only EXECUTE that if the user uses an
// OS that support this method (namely if the user is running iOS7 or later,
// but not for users running iOS6).
[_tableView setSeparatorInset:UIEdgeInsetsZero];
}
#endif重要提示:您应该在比较中使用数字常量,就好像您测试#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_7_0时,例如它在使用SDK6时不会工作一样,因为__IPHONE_7_0没有定义,因此在该上下文中计算为0,并且您的条件不会像预期的那样工作。
发布于 2013-11-05 21:24:55
是的,您可以使用__IPHONE_7_0定义:
#ifdef __IPHONE_7_0
if ([_tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[_tableView setSeparatorInset:UIEdgeInsetsZero];
}
#endif发布于 2013-11-27 07:37:07
根据苹果文档,你应该使用NSFoundationVersionNumber来区分iOS 7和其他操作系统。您可以使用以下宏使其更简单:
#define isIOS6 floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1
#define isIOS7 floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1然后在稍后的代码中执行
#ifdef __IPHONE_7_0
if (isIOS7) {
// Do additional stuff for iOS 7.
}
#endif是的,您应该同时检查编译时(使用#ifdef)和运行时(使用isIOS7),这样您就可以使用iOS6 SDK、iOS7 SDK以及带有iOS6目标的iOS7 SDK进行编译。
噢!记住,你不能做if (!isIOS7),你必须使用if (isIOS6)。
https://developer.apple.com/library/ios/documentation/userexperience/conceptual/transitionguide/
https://stackoverflow.com/questions/19789958
复制相似问题