前言
在iOS開發(fā)中,通常我們會使用很多第三方代碼(輪子),而一般我們會選擇使用CocoaPods來管理這個庫。然后有些庫作者已經(jīng)停止更新或者更新并沒有那么即使,當SDK升級或者編譯器升級以后,這些遺留代碼會出現(xiàn)很多警告。每次便宜項目看到這個多警告實在是很不爽。
關閉CocoaPods中的警告
在Podfile中加入 inhibit_all_warnings!即可
platform :ios, '9.0'
inhibit_all_warnings!
關閉文檔警告
pod install 后發(fā)現(xiàn)警告少了,但是還是有一些警告。 如下圖

因為從 Xcode8.0 開始,引入了文檔注釋的警告 。
解決方法關掉Pods的文檔警告
Pods -> Build Settings -> Documentation Comments -> NO

關閉單個庫警告
command + B 編譯一下,文檔警告沒有了,美滋滋。
然后發(fā)現(xiàn)不對,怎么pods中還有警告

這個應該算是 Xcode9 的“新特性”吧,從 Xcode9 開始我們定義一個不帶參數(shù)的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 本質(zhì)上是聲明,我們通常用來注釋。而他的另一個強大功能就是處理編譯器警告
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" 不兼容的指針類型