前兩天好好的程序在Xcode 8 4s(8.4)真機的時候遇到上圖錯誤,但是在5s、6s上都能正常運行,第一反應百度--然后根據百度經驗:
如果真機調試就是 undefined symbols for architecture armv7錯誤!
發生這種錯誤通常是project.pbxproj這個文件引起的,尤其在多人合作開發的時候,svn提交不規范可能導致project.pbxproj發生錯誤,導致文件的引用不在project.pbxproj文件中。
xcode項目import文件會根據project.pbxproj來查找,查找不到文件的引用則會有上述的錯誤。
解決方法點擊工程,在主界面中點擊Build Phases,根據提示信息“XXX”來判斷缺少什么文件,一般如果缺少自定義的文件,Complie Sources下沒有XXX文件,那么就在Complie Sources中加入該文件。如果缺少類庫,則在Link Binary With Libraries中加入該類庫。
又或者是:
一般真機調試時,如果報armv7錯誤,一般都是因為armv7指令集是打開的,而之前一些引用庫都是使用armv7之前的指令集編譯的(當這些引用的外部庫使用armv7指令集編譯后,就不會出現該問題)
解決辦法:
1. 去掉armv7指令集支持: xcode –> Build Settings –>valid Architectures 去掉armv7
2. 兼容armv7 : project –> Build Settings,把Build Active Architectures Only 的值設置為YES
呃,讓我折騰的不亦樂乎,扣持了大半天還是一樣的報錯。最后無望的自己開始靜下心來仔細看錯誤信息,發現都是與AF、MJ相關的第三方庫類報錯,那肯定是跟它倆跑不掉關系了。
通過報錯路徑搜索發現竟然有兩個libAFNetworking.a與兩個MJRefresh.a,好吧 .a靜態庫重復了。估計是之前cocoapods使用問題有關,刪掉之后完美運行。所以在編程中遇到錯誤第一時間還是仔細閱讀錯誤信息,其實已經基本上能鎖定錯誤范圍了。