在開發(fā)過程中,開發(fā)人員應該把每一個警告當做一個bug來對待,xcode8升級后,對類型上的要求又高了許多,很多警告是因為賦值的類型不同引起的,雖然不清楚是否會對正常運行造成影響,不過為了處理掉,還是老老實實的轉化類型.讓類型一致,解決掉這一類bug并沒有太大的問題,不過一些char ,long ,long long ,int , NSInteger類型間的轉換需要嚴謹一些.具體要去查一下各自對應的范圍,百度有很多.
正真讓人感覺煩惱的是一些編譯器的報警.大致總結一下:
一. 工程中刪除文件后的missing file警告:
首先是刪除文件的時候一定要在工程先移除引用,然后再從Finder中刪除該文件.
出現(xiàn)警告時:用終端命令進入missing file的目錄,然后運行命令:
- 1.svn delete file.cpp 或者 git rm file.cpp,
- 2.開啟隱藏目錄,把工程下的.svn刪除掉,
- 3.進入工程目錄下,運行命令 find . -name .svn -exec rm -rf { } ; 刪除工程中的隱藏文件.
三種方式多試幾次,如果還不行,找到你刪除的文件,再次拖入工程中,不要勾選copy,然后clean一下,再從工程中移除此文件...
二. 項目中c++混編的文件,編譯器的設置:
- 1.一些三方庫中經(jīng)常會有c++混編的.mm的文件,有時候導入后一直在庫里報錯,你說改別人庫的代碼吧,又沒那么容易,總之這個問題很煩很煩,之前我的老項目中一直沒辦法使用SDWebImage,還有MJRefresh這些常用的三方,寫什么都要用原生,后來仔細琢磨了下,我的思路是,把這些.mm文件中報錯的地方oc的寫法改一改,改成c或者c++的寫法,然后在編譯器設置里把.mm文件的編譯源設置為根據(jù)文件選擇.
- 2.具體就是在Build Settings下的 Apple LLVM 8.0 - Language 中找到Compile Sources As 中,選擇According To File Type.
- 3.網(wǎng)上也有人說直接改為Objective - C++,這種應該大多數(shù)情況下足夠用了...但是如果不行的話,還是試試上一種方法吧.
三. 工程中的Linker command faile with exit code 1 的警告
- 1.大多數(shù)情況下是新導入了三方庫文件路徑不對的問題,在 Build settings->Linking->Other Linker Flags下添加-ObjC,編譯試一下,如果不行,就添加-all_load,這個是針對所有的文件的,一般情況下用-ObjC能解決的就不要用這個.
- 2.如果新導入的庫中有.a文件導致這個警告的話,在Build settings->Search Path->Library Search Paths 添加靜態(tài)庫的相應路徑,用$(PROJECT_DIR)或者$(SRCROOT),這兩個含義不一樣,前者是表示整個項目,后者是項目的根目錄.個人建議用$(PROJECT_DIR).網(wǎng)上還有人說刪掉這里面原來的就好了.沒試過,可以試下.
- 3.有時候pch文件經(jīng)常出現(xiàn)這個情況,解決方法是在Prefix Header中用$(SRCROOT)寫pch文件的路徑
四.工程中的 No such file or directory 警告
- 1.這個具體是因為什么引起的現(xiàn)在還不太清楚,同樣也是三方庫的文件或者路徑的問題,解決方法是,在Build settings->Linking->Other Linker Flags下添加-W.
- 2.如果沒有用,在 Build settings->Build Options->Debug Information Format中改為DWARF,兩種方法都試試,或者同時添加下試試.網(wǎng)上有人說這種方法打包的時候會出問題,見下一方法.
- 3.不使用上一個方法,在Build settings->Apple LLVM 8.0 -Code Generation ->Generate Debug Symbol的值設為NO
關于這個問題,我只是處理了,并沒有仔細的研究.
參考鏈接:http://blog.sina.com.cn/s/blog_44174f2301014425.html
五. 關于xib的警告,這里不提是約束造成的警告,約束的警告請自行處理...
- 具體的警告沒有記錄,處理方式是打開xib,在右側Interface Builder Document->Builds for中選擇Deployment Target.
六. 代碼中一些方法棄用,變量沒有使用,以及提示方法永遠不會被執(zhí)行等其他警告
- 用#pragma 預處理指令消除.
代碼如下:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-相關命令" //這里放你自己的報警告的原因對應的代碼
#pragma clang diagnostic pop
- 關于#pragma相關,參考:http://nshipster.cn/pragma/
- 相關指令請參考:http://www.itnose.net/detail/6126304.html
【未完待續(xù)】
路漫漫其修遠兮...