iOS開發編譯報錯、常見問題(實時更新)


一、報錯與警報

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行內容:

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:

  "_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真機閃退,如何解決】

 

----------------2016年7月1日更新---------------

9.報錯如下:

Undefined symbols for architecture i386:

  "std::__basic_file<char>::is_open() const", referenced from:...

或者“std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::find(wchar_t const*, unsigned long, unsigned long) const", referenced from:”...

然后后面一大堆的以“std:”開頭的描述...

解決方案:項目名 -> Build Phases -> Link Binary With Libraries,

將libstdc++.dylib換成libstdc++.6.0.9.dylib就可以了。

 

----------------2016年12月22日更新---------------

10.報錯如:“No matching provisioning profile found: Your build settings specify a provisioning.....”,

老是提示指定UUID的provisioning profile,即使出現按鈕“Fix Issue”點擊也沒有解決?

解決方案:

a.找到項目中的 "xxx項目名.xcodeproj" 文件,右鍵打開包內容;

b.然后找到project.pbxproj文件,雙擊打開;

c.然后在文本中搜索“PROVISIONING_PROFILE",找到以它開頭的那一行代碼並刪除了。

刪完以后重新打開項目運行,你就會發現錯誤提示沒了,接下來運行工程,聯網情況下Xcode會自己

下載並安裝provisioning profile文件;然后就行了。

【參考:http://stackoverflow.com/questions/1760518/codesign-error-provisioning-profile-cannot-be-found-after-deleting-expired-prof】

 

  

二、常見問題:

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”(冒號沒有的)

把不需要的app項目刪除。或者定時刪除舊的項目。

-----2016年06月03日更新-----

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真正的意思我還沒讀懂.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM