天天看點

IOS開發之不同版本适配問題3(#ifdef __IPHONE_7_0 BaseSDK Development Target)

繼續之前的文章

在xcode中又兩個地方設定sdk,一個是Development Target,指的是編譯後的app可再終端的哪個版本上運作,設定方法如圖

IOS開發之不同版本适配問題3(#ifdef __IPHONE_7_0 BaseSDK Development Target)

另外一個是Base SDK,指的是目前編譯所用的SDK版本,設定方法如圖

IOS開發之不同版本适配問題3(#ifdef __IPHONE_7_0 BaseSDK Development Target)

這兩個在開發的時候需要注意,比如用xcode5.0預設的設定開發的app是iOS7.0的,想要适配iOS6.1,需要将Development Target改成iOS 6.1,并且将模拟器設定成iOS6.1,再運作程式的話就是在iOS6.1下邊運作了,但是如果不設定BaseSDK的話,工程就是基于SDK7.0編譯而基于SDK6.1運作,這樣極有可能崩潰,比如因tintColor屬性找不到而崩潰。是以調試的時候一定要設定BaseSDK。

還是之前文章的例子,在xcode5.0下建立一個工程,預設的Development Target和BaseSDK都是7.0,在AppDelegate.m檔案的didFinishLaunchingWithOptions方法裡邊寫上一句

self.window.tintColor = [UIColor redColor];
           

運作程式,不會出錯。現在将Development Target改成6.1,将模拟器改成6.1。

然後運作,編譯通過,但是運作崩潰,列印

2014-03-21 09:26:58.253 TestTarget2[77981:907] -[UIWindow setTintColor:]: unrecognized selector sent to instance 0x7572850
2014-03-21 09:26:58.284 TestTarget2[77981:907] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIWindow setTintColor:]: unrecognized selector sent to instance 0x7572850'
           

這是因為程式是在SDK7.0下編譯的,tintColor沒有問題,但是在SDK6.1下運作,6.1中是沒有tintColor的,結果就崩潰了。将BaseSDK改成6.1,再運作,就會編譯出錯,無法運作

IOS開發之不同版本适配問題3(#ifdef __IPHONE_7_0 BaseSDK Development Target)

将上邊一句改成

#ifdef __IPHONE_7_0
    self.window.tintColor = [UIColor redColor];
#endif
           

再運作,完美通過……