iOS開發時會考慮兩種SDK版本兼容性:一個是運行時SDK版本的兼容,即已構建/已發佈的APP能在不一樣系統版本的用戶手機上正常運行;一個是編譯時SDK版本的兼容,即便用不一樣版本的SDK編譯項目都能正常經過。後者是開發者常常會疏忽的,由於咱們一般統一使用最新的SDK來編譯項目,不多會再使用老的SDK編譯項目,但爲了項目的健壯和靈活,咱們應該瞭解一下如何保證編譯時的SDK版本兼容。web
因爲每一個版本的iOS SDK,蘋果都會增長許多新的功能,所以會有新的類型,新的方法(因爲OC的動態特徵,新方法不會形成編譯問題)等等,開發者會火燒眉毛的引入到已有的項目中去,可是用老的SDK編譯這些新代碼時,會出現找不到符號的編譯錯誤。所以咱們應該用如下辦法屏蔽這些問題。spa
1.使用類名加載新的類型code
WKWebView* webView = [[NSClassFromString(@"WKWebView") alloc] initWithFrame:self.bounds configuration:configuration];
2.使用版本宏區分代碼blog
const BOOL IOS10_OR_LATER = ( [[[UIDevice currentDevice] systemVersion] compare:@"10.0" options:NSNumericSearch] != NSOrderedAscending ); #if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= 100000)) if (IOS10_OR_LATER) { [UNUserNotificationCenter currentNotificationCenter].delegate = [AppInitializer sharedInstance]; } #endif