你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS不同版本適配問題(#ifdef __IPHONE_7_0)

iOS不同版本適配問題(#ifdef __IPHONE_7_0)

編輯:IOS開發綜合

部分參考http://www.cnblogs.com/ios8/p/ios-version-com.html

下面舉個簡單的例子來說明在iOS7.0和iOS6.1(以及更低版本)之間的適配問題(用的是xcode5.0,裡邊有6.1和7.0兩個版本的sdk)

新建一個工程,默認的development target,base sdk以及模擬器的版本都是7.0,在AppDelegate中的didFinishLaunchingWithOptions方法裡寫下

self.window.tintColor = [UIColor redColor];  

然後運行,這樣是沒有任何錯誤的。接下來將development target,base sdk以及模擬器的版本都改成6.1(注意默認的xcode是沒有6.1的sdk的,需要自己另外導入)。然後運行,就會報錯:

也就是說tintColor屬性在iOS6.1中根本就沒有,在編譯時候就會出錯。這時候如下加上判斷語句也是沒有用的,照樣報錯(預處理,編譯,運行的問題這裡不再廢話)

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {  
    self.window.tintColor = [UIColor redColor];  
} 
遇見這種情況只能加上預處理語句,這樣寫:
#ifdef __IPHONE_7_0  
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {  
        self.window.tintColor = [UIColor redColor];  
    }  
#endif 

注意需要加入頭文件

#import 

這樣編譯通過就不會報錯了……這是因為在sdk6.1下的usr/include下邊有一個Availability.h文件,裡邊定義了一大堆宏,其中關於iphone的有
#define __IPHONE_2_0     20000  
#define __IPHONE_2_1     20100  
#define __IPHONE_2_2     20200  
#define __IPHONE_3_0     30000  
#define __IPHONE_3_1     30100  
#define __IPHONE_3_2     30200  
#define __IPHONE_4_0     40000  
#define __IPHONE_4_1     40100  
#define __IPHONE_4_2     40200  
#define __IPHONE_4_3     40300  
#define __IPHONE_5_0     50000  
#define __IPHONE_5_1     50100  
#define __IPHONE_6_0     60000  
#define __IPHONE_6_1     60100  
#define __IPHONE_NA      99999  /* not available */ 
而sdk7.0裡邊多了一行

#define __IPHONE_7_0     60100 
iOS8當然也是一樣的道理

除此之外,當使用framework或者.a的時候需要注意

因為在編譯framework或者.a的時候是依賴當時編譯的環境決定的,如使用iOS6的sdk可以將framework或者.a順利編譯通過,但是在真正生成app的時候需要保證編譯app時的sdk和編譯framework或者.a的sdk是一致的,且同時需要加入運行時判斷([[[UIDevice currentDevice] systemVersion] floatValue]那個)

說明:

1、如果是使用低版本sdk編譯的(如iOS6),將最終的應用安裝至高版本的設備上(iOS7的系統),此時應該不會出現問題,因為iOS7兼容iOS6,但是無法使用iOS7特有的新功能,因為代碼被屏蔽了。

2、如果是使用高版本sdk編譯的(如iOS7),將最終的應用安裝至低版本的設備上(iOS6的系統),此時如果不加入運行時判斷就會出現問題(可能是crash)。因為應用本身是用iOS7編譯的,並使用iOS7才有的新功能,而設備並不支持iOS7。


寫的可能有點亂了,純自己記錄用的




  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved