Xcode中的Clang静态检查提供了iOS低版本调用高版本API检查的功能,可以在开发过程中提前发现问题,避免导致兼容性问题。
具体实现如下:
-
Xcode中进入工程的Build Settings页面,在“Other C Flags”和“Other C++ Flags”中增加“-Wunguarded-availablility”,如下图所示:
设置好之后,如果误调用了高版本API,Clang会检测到并报出警告。
为避免警告过多而忽视,可以将设置修改为“-Werror-unguarded-availablility”,一旦iOS低版本调用了高版本API则会编译报错。 - 针对pod需要在 podspec 中添加 compiler_flags
- 如果确认代码是安全的,例如使用了respondsToSelector或available等保护,可以用 #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