xcode去掉警告

原文地址:http://www.henishuo.com/xcode-delete-warnings/




引言

在我們的項目中,通常使用了大量的第三方代碼,這些代碼可能很複雜,我們不敢改動他們,可是作者已經停止更新了,當sdk升級或者是編譯器升級後,這些遺留的代碼可能會出現許許多多的警告,那麼我們有沒有辦法去掉這些煩人的警告,不然一個工程幾百個警告,你看着怎麼都不爽吧。我們怎麼去掉警告呢?

  • 最直接、最一勞永逸、最安全的方式,直接找到警告的那段代碼,改爲不警告。這個方式最安全。

可是它有一個問題,就是,當我們很多文件都有這種類型的警告的時候,我們就需要改動很多很多的源碼了, 對於不是我們寫的源碼,有可能隨時會更新的,我們這種方式,顯然就不太可取了。

  • 使用編譯器提供的宏來操作,這個方式在我們的工程中會大量的看到:

這種方式的問題,同第一個差不多,也是要修改源代碼的實現的,對於第三方,我們肯定是不想改動它的,尤其是一些更新很頻繁的第三方,一般警告出現後不久,作者就更新了,我們在此做這樣的操作,就顯得浪費了.並且在 添加arm64支持的時候,一下出現幾百個某種類型的警告,改起來也是相當費時費力的啊!

比如我們的工程,打開了arm64,然後編譯:

image

關閉某一個指定文件的某種指定類型的警告

這裏拿一個具體工程來說吧.比如我們工程裏有一個文件PresencePacket

image

其實關閉某個指定文件的某種類型的警告很簡單,就如同我們以前給某一個文件添加ARC支持或者不支持的時候那樣 添加 忽略/顯示 某種類型警告

image

雙擊 文件, 在其中添加-Wno-shorten-64-to-32 (這個關鍵在就是讓編譯器忽略 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int')警告)

image

添加完成後,再編譯,那麼PresencePacket文件中的 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int’)警告就沒有了,是不是很簡單,很方便.

<iframe id="iframeu2513605_0" src="http://pos.baidu.com/acom?rdid=2513605&amp;dc=2&amp;di=u2513605&amp;dri=0&amp;dis=0&amp;dai=2&amp;ps=1439x353&amp;dcb=BAIDU_UNION_define&amp;dtm=BAIDU_DUP_SETJSONADSLOT&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1457428986833&amp;ti=Xcode%E5%8E%BB%E6%8E%89%E8%AD%A6%E5%91%8A%20%7C%20%E6%A0%87%E5%93%A5%E7%9A%84%E6%8A%80%E6%9C%AF%E5%8D%9A%E5%AE%A2&amp;ari=1&amp;dbv=0&amp;drs=1&amp;pcs=1232x875&amp;pss=1232x1487&amp;cfv=0&amp;cpl=3&amp;chi=1&amp;cce=true&amp;cec=UTF-8&amp;tlm=1457400186&amp;ltu=http%3A%2F%2Fwww.henishuo.com%2Fxcode-delete-warnings%2F&amp;ecd=1&amp;psr=1920x1080&amp;par=1920x974&amp;pis=-1x-1&amp;ccd=24&amp;cja=true&amp;cmi=5&amp;col=zh-cn&amp;cdo=-1&amp;tcn=1457428987&amp;qn=8412481939be66d5&amp;tt=1457428986800.71.233.234" width="760" height="90" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="border-width: 0px; font-family: inherit; font-style: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: bottom; max-width: 100%;"></iframe>

這種方式,已經是大大的減少了工作量了,只需要在指定的文件的編譯中添加-Wno-shorten-64-to-32就可以了.那麼有沒有什麼方式可以讓編譯器忽略整個工程中的 指定類型的警告呢?

關閉工程中指定類型的警告

這個最簡單了, 工程的target有一個Other Warning Flags

image

在其中添加-Wno-shorten-64-to-32

image

再重新編譯,哈哈,整個文件中的Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int’)警告全部消失了!!!!

查看警告類型

大家可能很疑惑,上面的-Wno-shorten-64-to-32 是怎麼來的,我怎麼知道Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int’)警告 就是 -Wno-shorten-64-to-32類型呢?這裏,其實不需要記憶的,當工程中有這種類型警告的時候

在警告窗口,某個警告上,我們右擊,顯示出右鍵菜單,選擇其中的Reveal in Log

image

則會顯示:

image

注意到其中[-Wshorten-64-to-32],在這個括號中的就是 這種警告的類型-W是前綴,這個前綴表示的是 打開這種類型的警告 如果我們是要關閉某種類型的警告的話, 要將-W換成-Wno-,這樣就得到了-Wno-shorten-64-to-32了.

後記

對於我們使用cocoapod引入的第三方,我們可以在podfile文件中 增加一句 inhibit_all_warnings! 來要pod的工程不顯示任何警告,例如

還有就是,上面的方法也適合其它類型的警告!!!

<iframe id="iframeu2515746_0" src="http://pos.baidu.com/acom?rdid=2515746&amp;dc=2&amp;di=u2515746&amp;dri=0&amp;dis=0&amp;dai=3&amp;ps=2784x353&amp;dcb=BAIDU_UNION_define&amp;dtm=BAIDU_DUP_SETJSONADSLOT&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1457428986833&amp;ti=Xcode%E5%8E%BB%E6%8E%89%E8%AD%A6%E5%91%8A%20%7C%20%E6%A0%87%E5%93%A5%E7%9A%84%E6%8A%80%E6%9C%AF%E5%8D%9A%E5%AE%A2&amp;ari=1&amp;dbv=0&amp;drs=1&amp;pcs=1232x875&amp;pss=1232x2832&amp;cfv=0&amp;cpl=3&amp;chi=1&amp;cce=true&amp;cec=UTF-8&amp;tlm=1457400186&amp;ltu=http%3A%2F%2Fwww.henishuo.com%2Fxcode-delete-warnings%2F&amp;ecd=1&amp;psr=1920x1080&amp;par=1920x974&amp;pis=-1x-1&amp;ccd=24&amp;cja=true&amp;cmi=5&amp;col=zh-cn&amp;cdo=-1&amp;tcn=1457428987&amp;qn=2e0a6f4e229ed29f&amp;tt=1457428986800.79.242.242" width="760" height="90" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="border-width: 0px; font-family: inherit; font-style: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: bottom; max-width: 100%;"></iframe>

關注我

關注 賬號 備註
標哥博客iOS交流羣一 324400294(滿) 羣一若已滿,請申請羣二
標哥博客iOS交流羣二 494669518(滿) 羣二若已滿,請申請羣三
標哥博客iOS交流羣三 461252383(滿) 羣三若已滿,請申請羣四
標哥博客iOS交流羣四 250351140  羣四若已滿,會有提示信息
關注微信公衆號 iOSDevShares 關注微信公衆號,會定期地推送好文章
關注新浪微博賬號 標哥的技術博客 關注微博,每次發佈文章都會分享到新浪微博
關注標哥的GitHub CoderJackyHuang 這裏有很多的Demo和開源組件
關於我 進一步瞭解標哥 如果覺得文章對您很有幫助,可捐助我!
版權聲明: 本文由【標哥的技術博客】整理並轉載(本博客只作轉載,不代表同意文中觀點) 
原文地址: http://www.cocoachina.com/ios/20141218/10678.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章