Xcode中的Clang靜態(tài)檢查提供了iOS低版本調(diào)用高版本API檢查的功能,可以在開發(fā)過程中提前發(fā)現(xiàn)問題粉渠,避免導(dǎo)致兼容性問題狼荞。
具體實(shí)現(xiàn)如下:
-
Xcode中進(jìn)入工程的Build Settings頁面宅粥,在“Other C Flags”和“Other C++ Flags”中增加“-Wunguarded-availablility”啊楚,如下圖所示:
設(shè)置好之后吠冤,如果誤調(diào)用了高版本API,Clang會(huì)檢測(cè)到并報(bào)出警告恭理。
為避免警告過多而忽視拯辙,可以將設(shè)置修改為“-Werror-unguarded-availablility”,一旦iOS低版本調(diào)用了高版本API則會(huì)編譯報(bào)錯(cuò)颜价。 - 針對(duì)pod需要在 podspec 中添加 compiler_flags
- 如果確認(rèn)代碼是安全的涯保,例如使用了respondsToSelector或available等保護(hù),可以用 #pragma clang diagnostic ignored 忽略掉警告周伦,或者 @available 直接解決:
if (@available(iOS 8.0, *)) {
NSString *str = @"Hello world!";
[str containsString:@"I'm back!"];
}
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunguarded-availablility"
NSString *str = @"Hello world!";
[str containsString:@"I'm back!"];
#pragma clang diagnostic pop