背景
新的Xcode 11.0出來了,在團隊裏,可能喜歡嚐鮮了同窗會優先更新體驗,調用一些iOS13纔有的API,好比html
@implementation UISearchBar (Ext)
- (UITextField *)getSearchTextField {
if (@available(iOS 13.0, *)) {
return self.searchTextField;
} else {
return [self valueForKey:@"_searchField"];
}
}
@end
複製代碼
此時,還處於Xcode ~< 13.0的同窗編譯是不經過的,由於他們的~<13.0 UIKit中尚未這個API。ios
添加編譯判斷bash
#ifndef __IPHONE_13_0
#define __IPHONE_13_0 130000
#endif
@implementation UISearchBar (Ext)
- (UITextField *)getSearchTextField {
/* #if avoid build errors*/
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
if (@available(iOS 13.0, *)) {
return self.searchTextField;
} else {
return [self valueForKey:@"_searchField"];
}
#else
return [self valueForKey:@"_searchField"];
#endif
}
@end
複製代碼
核心代碼在這裏ui
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
//Base SDK最高支持版本大於等於13.0
#else
#endif
複製代碼
__IPHONE_OS_VERSION_MAX_ALLOWED
這個東西進到頭文件usr/include/AvailabilityInternal.h能夠看到spa
它是當前支持的最高版本,至關於前面Xcode中選擇的Base SDK 參照:曾靜的博客-iOS開發之多系統版本兼容code
#define __IPHONE_13_0 130000
這在這裏usr/include/AvailabilityInternal.hcdn
END到此就解決了不一樣版本Xcode的編譯適配問題。htm