2013-11-25 118 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

相關問題