在不同版本的XCode上编译并运行相同的代码,以针对不同的iOS版本
我的应用程序以前是用XCode 4.5编码的,现在用于iOS7兼容性,我将它编码到XCode 5.0中,添加了一些代码,仅限iOS7。同时我需要在XCode 4.5上运行它,现在在这里它会显示错误,因为该特定的代码在iOS < 7.0中不可用。在不同版本的XCode上编译并运行相同的代码,以针对不同的iOS版本
E.g.
if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
}
有没有问题,当我编译它的XCode 5.0,但显示错误时编译XCode中4.5,我知道原因 - 那就是,UIStatusBarStyleLightContent
可从iOS7而已,而iOS7是在Xcode 5.0开始支持开始,但我想要一个解决方案,这个代码不会影响,如果它不支持特定的iOS目标?
喜欢的东西,
if(NOT_SUPPORTED_IOS) {
//NO NEED TO COMPILE THIS LINE or THIS LINE WONT EXECUTE
}
可以使用条件编译来处理这样的情况:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 // iOS 7.0 supported
// iOS 7 code here
#else
// Pre-iOS 7 code here
#endif
当你的Xcode 5下编译,你会被编译针对iOS的7 SDK:在这样的情况下,使用第一个分支。当您在Xcode 4.5下编译时,您将使用较旧的SDK版本,并使用第二个分支。
注意预编译器#if/#endif
的使用:这将有效地使代码对编译器可见或不可见。
这只会在编译时解决问题。但是您仍然有其他问题需要考虑:当您的Xcode 5构建应用程序将运行在iOS 6设备上时。在这种情况下,由于使用iOS 7专用功能,您的应用程序会崩溃。所以,你还需要像运行后卫:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
在你的情况,这将给:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 // iOS 7.0 supported
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
else
#endif
[UIApplication sharedApplication].statusBarStyle = ...;
完美,谢谢! :-) – Hemang
是您正在使用的Xcode 4.5是之前支持的iOS版本到iOS 7的原因是什么?还是有其他原因? – Spectravideo328