如何去掉Xcode工程中某種類型的警告
問(wèn)題描述
在我們的項(xiàng)目中,通常使用了大量的第三方代碼,這些代碼可能很復(fù)雜,我們不敢改動(dòng)他們,可是作者已經(jīng)停止更新了,當(dāng)sdk升級(jí)或者是編譯器升級(jí)后,這些遺留的代碼可能會(huì)出現(xiàn)許許多多的警告,那么我們有沒(méi)有辦法去掉這些煩人的警告,不然一個(gè)工程幾百個(gè)警告,你看著怎么都不爽吧。我們?cè)趺慈サ艟婺兀?/p>
1. 最直接、最一勞永逸、最安全的方式,直接找到警告的那段代碼,改為不警告。這個(gè)方式最安全。
可是它有一個(gè)問(wèn)題,就是,當(dāng)我們很多文件都有這種類型的警告的時(shí)候,我們就需要改動(dòng)很多很多的源碼了, 對(duì)于不是我們寫的源碼,有可能隨時(shí)會(huì)更新的,我們這種方式,顯然就不太可取了。
2. 使用編譯器提供的宏來(lái)操作,這個(gè)方式在我們的工程中會(huì)大量的看到:
#pragma clang diagnostic push #pragma clang diagnostic ignored"-Wdeprecated-declarations" //寫在這個(gè)中間的代碼,都不會(huì)被編譯器提示-Wdeprecated-declarations類型的警告 dispatch_queue_tcurrentQueue =dispatch_get_current_queue(); #pragma clang diagnostic pop
這種方式的問(wèn)題,同第一個(gè)差不多,也是要修改源代碼的實(shí)現(xiàn)的,對(duì)于第三方,我們肯定是不想改動(dòng)它的,尤其是一些更新很頻繁的第三方,一般警告出現(xiàn)后不久,作者就更新了,我們?cè)诖俗鲞@樣的操作,就顯得浪費(fèi)了.并且在 添加arm64支持的時(shí)候,一下出現(xiàn)幾百個(gè)某種類型的警告,改起來(lái)也是相當(dāng)費(fèi)時(shí)費(fèi)力的啊!
比如我們的工程,打開(kāi)了arm64,然后編譯:
3.關(guān)閉某一個(gè)指定文件的某種指定類型的警告
這里,拿一個(gè)具體工程來(lái)說(shuō)吧.比如我們工程里有一個(gè)文件 PresencePacket
其實(shí)關(guān)閉某個(gè)指定文件的某種類型的警告很簡(jiǎn)單,就如同我們以前給某一個(gè)文件添加 ARC支持或者不支持的時(shí)候那樣 添加 忽略/顯示 某種類型警告
雙擊 文件, 在其中添加 -Wno-shorten-64-to-32 (這個(gè)關(guān)鍵在就是讓編譯器忽略 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int') 警告)
添加完成后,再編譯,那么PresencePacket文件中的 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int') 警告就沒(méi)有了,是不是很簡(jiǎn)單,很方便.
這種方式,已經(jīng)是大大的減少了工作量了,只需要在指定的文件的編譯中添加 -Wno-shorten-64-to-32就可以了.那么有沒(méi)有什么方式可以讓編譯器忽略整個(gè)工程中的 指定類型的警告呢?
4.關(guān)閉工程中指定 類型的警告
這個(gè)最簡(jiǎn)單了, 工程的target有一個(gè) Other Warning Flags
在其中添加 -Wno-shorten-64-to-32
再重新編譯,哈哈,整個(gè)文件中的 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int') 警告全部消失了!!!!
5.大家可能很疑惑,上面的-Wno-shorten-64-to-32 是怎么來(lái)的,我怎么知道 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int') 警告 就是 -Wno-shorten-64-to-32類型呢?這里,其實(shí)不需要記憶的,當(dāng)工程中有這種類型警告的時(shí)候
在警告窗口,某個(gè)警告上,我們右擊,顯示出右鍵菜單,選擇其中的 Reveal in Log
則會(huì)顯示
注意到其中 [-Wshorten-64-to-32],在這個(gè)括號(hào)中的就是 這種警告的類型 -W是前綴,這個(gè)前綴表示的是 打開(kāi)這種類型的警告 如果我們是要關(guān)閉某種類型的警告的話, 要將 -W換成 -Wno-
這樣就得到了 -Wno-shorten-64-to-32了.
后記:
對(duì)于我們使用cocoapod引入的第三方,我們可以在podfile文件中 增加一句 inhibit_all_warnings! 來(lái)要pod的工程不顯示任何警告,例如
link_with 'SecondHouseBrokerAPP','SecondHouseBrokerCOM' platform :ios,'6.0' inhibit_all_warnings! pod 'CocoaAsyncSocket' pod 'Reachability' pod 'ProtobufObjC' pod 'SDWebImage' pod 'FMDB' pod 'GPUImage' pod 'CXPhotoBrowser' pod 'CocoaLumberjack'
還有就是,上面的方法也適合其它類型的警告!!!
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
- ios xcode警告與錯(cuò)誤的分析總結(jié)
- Xcode使用教程詳細(xì)講解(全)
- XCode編譯速度慢的處理方法
- iOS10 適配-Xcode8問(wèn)題總結(jié)及解決方案
- Xcode中iOS應(yīng)用開(kāi)發(fā)的一般項(xiàng)目目錄結(jié)構(gòu)和流程簡(jiǎn)介
- 詳解iOS11、iPhone X、Xcode9 適配指南
- 教你如何解決XCODE升級(jí)后插件不能用問(wèn)題
- iOS Xcode8更新后輸出log日志關(guān)閉的方法
- xcode8 關(guān)閉控制臺(tái)不打印不信息的解決方法(圖文詳解)
- Xcode 8打印log日志的問(wèn)題小結(jié)及解決方法
相關(guān)文章
iOS啟動(dòng)頁(yè)倒計(jì)時(shí)跳過(guò)按鈕功能
這篇文章主要介紹了iOS啟動(dòng)頁(yè)倒計(jì)時(shí)跳過(guò)按鈕功能,需要的朋友可以參考下2017-07-07iOS開(kāi)發(fā)教程之常見(jiàn)的性能優(yōu)化技巧
這篇文章主要給大家介紹了關(guān)于iOS開(kāi)發(fā)教程之常見(jiàn)的性能優(yōu)化技巧,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用iOS具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03iOS開(kāi)發(fā)中以application/json上傳文件實(shí)例詳解
在和sever后臺(tái)交互的過(guò)程中、有時(shí)候、他們需要我們iOS開(kāi)發(fā)者以“application/json”形式上傳,具體實(shí)例代碼大家參考下本文2017-07-07iOS中讓多個(gè)cell上都出現(xiàn)倒計(jì)時(shí)的分析與實(shí)現(xiàn)
這篇文章主要給大家介紹了在iOS中每個(gè)cell上都出現(xiàn)倒計(jì)時(shí)的分析與實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2017-07-07iOS仿網(wǎng)易新聞滾動(dòng)導(dǎo)航條效果
這篇文章主要為大家詳細(xì)介紹了iOS仿網(wǎng)易新聞滾動(dòng)導(dǎo)航條效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Xcode8以及iOS10適配等常見(jiàn)問(wèn)題匯總(整理篇)
隨著iOS 10的更新以及Xcdoe 8的更新出現(xiàn)了很多問(wèn)題,今天小編抽時(shí)間給大家整理下我遇到的坑特此分享到腳本之家平臺(tái),供大家參考2016-09-09IOS 仿時(shí)光網(wǎng)選票UI實(shí)例代碼
這篇文章主要介紹了IOS 仿時(shí)光網(wǎng)選票UI實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-09-09iOS 使用 socket 實(shí)現(xiàn)即時(shí)通信示例(非第三方庫(kù))
這篇文章主要介紹了iOS 使用 socket 即時(shí)通信示例(非第三方庫(kù))的資料,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2017-02-02iOS App開(kāi)發(fā)中導(dǎo)航欄的創(chuàng)建及基本屬性設(shè)置教程
這篇文章主要介紹了iOS App開(kāi)發(fā)中導(dǎo)航欄的創(chuàng)建及基本屬性設(shè)置教程,即用UINavigationController來(lái)編寫navigation,示例代碼為Objective-C語(yǔ)言,需要的朋友可以參考下2016-02-02