一、報錯與警報
1、錯誤程式碼:No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=armv7 armv7s)
build 這個target的時候命令列報錯。可以在 build setting 中,搜尋bitcode,並吧 enable bitcode 設定為 NO.
2、ld:framework not found IOKit
終端輸入以下2行內容:
1 2 3 |
cd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/IOKit.framework sudo ln -s Versions/A/IOKit . |
其中,如果不行,從資料夾中慢慢開啟看下路徑對不對,如果像有修改Xcode名稱的,注意如 “xcode 5” [有空格” “的記得在終端中加上 “”這個符號];
3、程式沒問題,執行報錯:Directory not empty
位於/Users/你電腦名/Library/Developer/Xcode/DerivedData下的快取檔案佔很大的快取空間,如果長時間不刪除xcode下的快取檔案,就會導致硬碟空間越來越小直到Directory not empty。刪除了快取檔案再執行就不會再報錯。
或者,直接clean一次就可以了。
4、如果遇到編譯錯誤類似:Undefined symbols for architecture armv7:
“OBJC_CLASS$_ASIHTTPRequest”,先檢查上述的依賴程式碼是否已加入編譯列表,如未加入,依次點選Target->Build Phases->Compile Sources,點選底部“+”新增上述程式碼。
如果遇到編譯錯誤類似:Undefined symbols for architecture armv7: “_inflateEnd”, referenced from,則應該是缺少依賴libz.dylib,新增方法:依次點選Target->Build Phases->Compile Sources,點選底部“+”,在彈出的列表中輸入libz,新增搜尋結果中最新版本即可。
5.but did not return a nonzero exit code to indicate failure
日誌類似:
選擇 Build Settings 選單,把compress PNG files 改成NO。
6.Undefined symbols for architecture i386:
日誌類似:(缺少BJGKPaintMapViewController檔案的引用)
原因:xcode專案import檔案時,會根據project.pbxproj來查詢,查詢不到檔案的引用則會有上述的錯誤。圖中就是BJGKPaintCommand檔案對BJGKPaintMapViewController類的引用找不到。常常在多人合作開發的時候,svn提交不規範導致的project.pbxproj發生錯誤,使得檔案的引用不在project.pbxproj檔案中。
解決方案:
a.點選Build Phases,如果是缺少的xxx是類名,則在Complie Sources中加入該檔案。若缺少類庫,則在Link Binary With Libraries中加入該類庫。例如圖中是缺少 “BJGKPaintMapViewController”,這個是類名。
b.或者直接把需要引用這個缺少類/庫的原檔案去掉引用,筆者就是多呼叫了BJGKPaintCommand類檔案,所以把它去掉,也就不需要補上BJGKPaintMapViewController類的引用了。
—第6點 2016年08月25日補充—
遇到類似以下報錯:
Undefined symbols for architecture i386:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Undefined symbols for architecture i386: "_sqlite3_bind_blob", referenced from: -[FMDatabase bindObject:toColumn:inStatement:] in FMDatabase.o "_sqlite3_bind_double", referenced from: -[FMDatabase bindObject:toColumn:inStatement:] in FMDatabase.o "_sqlite3_bind_int", referenced from: -[FMDatabase bindObject:toColumn:inStatement:] in FMDatabase.o "_sqlite3_bind_int64", referenced from: -[FMDatabase bindObject:toColumn:inStatement:] in FMDatabase.o "_sqlite3_bind_null", referenced from: -[FMDatabase bindObject:toColumn:inStatement:] in FMDatabase.o "_sqlite3_bind_parameter_count", referenced from: -[FMDatabase executeQuery:withArgumentsInArray:orDictionary:orVAList:] in FMDatabase.o -[FMDatabase executeUpdate:error:withArgumentsInArray:orDictionary:orVAList:] in FMDatabase.o ......... |
上面的意思是Link Binary With Libraries 中沒有新增 “libsqlite3.dylib”,但是Xcode7中只有對應的“*.tbd”,而沒有“*.dylib庫”,怎麼辦呢?
方法①:
“Link Binary With Libraries”中點選 “+”,點“Add Other”,這時候按下“Command+Shift+G”,輸入“/usr/lib”進行搜尋,可以看到 “libsqlite3.dylib”,雙擊新增完畢。
方法②:
點專案,TAGERT -> Build Setting -> Lingking -> Other Linker Flag ,在裡面新增一行字元: “-lsqlite3”。 新增完畢。
7、問題: ld/ warning/ directory not found for option從專案中刪除了某個目錄、檔案以後,編譯出現警告資訊:_ld: warning: directory not found for option“XXXXXX”:
有時候已經從專案中刪除了檔案和資料夾還是報這個警告,雖然沒有發生錯誤,但是看著很不舒服。。
去掉警告的辦法如下:
1選擇工程, 編譯的 (targets)
2選擇 Build Settings 選單
3如下查詢 Library Search Paths 和 Framework Search Paths, 刪掉編譯報warning的路徑即OK。
更新–>
8.Xcode7打包,iOS9真機閃退,如何解決?** **
答:點選連結->【Xcode7打包,iOS9真機閃退,如何解決】
二、常見問題:
1.模擬器的目錄:
點選“Finder->前往->資源庫->Developer->Xcode->DerivedData”,【看不到“資源庫”?點選“前往”,看到選單欄時,按“Option”就看到了.】
或者點選“Finder->前往->前往資料夾”,輸入:
”/Users/你當前登陸的使用者名稱/Library/Application Support/iPhone Simulator/“
2.Xcode構建專案多,記憶體佔用大,如果清除快取?
a.App被XCode Build在這裡:
點選“Finder->前往->資源庫->Developer->Xcode->DerivedData”,
或者,點選“Finder->前往->前往資料夾”,輸入: “/Users/你當前登陸的使用者名稱/Library/Developer/Xcode/DerivedData”(冒號沒有的)
b.連線真機生成的檔案,可以全部刪掉或者把不常用的版本刪掉,再次連線裝置會自動生成:
“~/Library/Developer/Xcode/iOS DeviceSupport”
c.app打包生成的檔案,可以刪掉不需要的專案打包檔案:
“~/Library/Developer/Xcode/Archives”。
以上都可以把不需要的app專案刪除。或者定時刪除舊的專案。
3.Xcode專案模擬器上png格式的本地圖片正常顯示,真機除錯不顯示:
可能有2個原因:
(1).圖片的初始狀態,不是png的,被自己直接就改成png了。這樣模擬器OK,真機就有問題。
可以使用Mac 系統自帶的圖片預覽匯出一下,(就是雙擊圖片,點選左上角:檔案->匯出->png格式),再重新匯入就行了。
(2).真機上檔名是區分大小寫的,而模擬器上面是不區分的,所以模擬器可以,真機不行;
更新–>
4.專案更改一部分資源或者修改部分資料後,再次執行模擬器還是原來的效果,沒有發生變化:(例如提示找不到某些標頭檔案。)
按一下:Product -> Clean ,應該是清除一下再編譯;
每次專案有資料修改,重新執行前,我都會clean一下,避免因為快取出現的錯誤…這個經常用,但是clean真正的意思我還沒讀懂.
(轉載請標明原文出處,謝謝支援 ~ ^-^ ~) by:啊左~
打賞支援我寫出更多好文章,謝謝!
打賞作者
打賞支援我寫出更多好文章,謝謝!
任選一種支付方式