前言
在iOS开发中,通常我们会使用很多第三方代码(轮子),而一般我们会选择使用CocoaPods来管理这个库。然后有些库作者已经停止更新或者更新并没有那么即使,当SDK升级或者编译器升级以后,这些遗留代码会出现很多警告。每次便宜项目看到这个多警告实在是很不爽。
关闭CocoaPods中的警告
在Podfile中加入 inhibit_all_warnings!
即可
platform :ios, '9.0'
inhibit_all_warnings!
关闭文档警告
pod install
后发现警告少了,但是还是有一些警告。 如下图
因为从 Xcode8.0 开始,引入了文档注释的警告 。
解决方法关掉Pods的文档警告
Pods
-> Build Settings
-> Documentation Comments
-> NO
关闭单个库警告
command + B
编译一下,文档警告没有了,美滋滋。
然后发现不对,怎么pods中还有警告
这个应该算是 Xcode9 的“新特性”吧,从 Xcode9 开始我们定义一个不带参数的block
如typedef void(^TestBlock)();
会显示警告This block declaration is not a prototype
直接点击Fix typedef void(^TestBlock)(void);
即可
Or
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wstrict-prototypes"
typedef void(^TestBlock)();
#pragma clang diagnostic pop
来忽略警告
对于自己的项目代码,肯定是每个 warning 都 fix 掉,按照官方推荐写法来 coding ,然后对于第三方库来说,要改动的地方太多了,这种方法不太合适。
下面介绍一种一劳永逸的方法。
Pods
-> target
-> Other Warning Flags
添加 -w
<font color=#FF1493>注意:</font>是小写w,如果是大写的W则是显示所有警告。
同样可以直接修改 Pods 整个 Project 的 Other Warning Flags
关闭所有第三方库的警告。
关闭单个文件警告
此方法同样适用于项目中关闭单个文件的 warning
target
-> Build Phases
-> Compile Source
找到相关文件,在后面加入-w
关闭整个工程的相关警告
不过并不推荐直接关闭文件或者整个项目的 warning ,warning有助于定位问题,能改掉的 warning 还是尽量修改。
关闭局部警告方法
上面有提到使用#pragma clang diagnostic ignored "警告名称"
来消除警告
#pragma
本质上是声明,我们通常用来注释。而他的另一个强大功能就是处理编译器警告
clang diagnostic
就是 #pragma
的一个常用命令
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-warning name"
// your code
#pragma clang diagnostic pop
那么我们怎么找到这个 warning name
呢?
选中广告右击显示菜单,选则 Reveal in Log
如图,中括号中的 -Wstrict-prototypes
就是 warning name
常用的警告名称
#pragma clang diagnostic ignored "-Wunused-variable"
未使用的变量
#pragma clang diagnostic ignored "-Warc-retain-cycles"
retain cycle
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
方法弃用警告
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
不兼容的指针类型