2013-11-25 120 views
1

我的应用程序以前是用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 
} 
+0

是您正在使用的Xcode 4.5是之前支持的iOS版本到iOS 7的原因是什么?还是有其他原因? – Spectravideo328

回答

5

可以使用条件编译来处理这样的情况:

#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 = ...; 
+0

完美,谢谢! :-) – Hemang

相关问题