問題1:ARC與MRC混編
可以給ARC項(xiàng)目添加MRC標(biāo)記(-fno-objc-arc)扛伍,也可以給MRC項(xiàng)目添加ARC標(biāo)記(-fobjc-arc)
問題2:OC委托報(bào)錯(cuò) Existing instance variable 'middleMan' for property 'middleMan' with assign
@interface Student : NSObject { id<Question> delegate; } 改為:
@interface Student : NSObject { __unsafe_unretained id<Question> delegate; }
問題3:xcode6 使用MJRefresh剿干,Too many arguments to function call, expected 0, have *
將XCode升級(jí)到6后嫂便,報(bào)Too many arguments to function call, expected 0, have *绽媒,在XCode5.1里能編譯通過的曙求,到xcode6就報(bào)錯(cuò)
objc_msgSend(self.beginRefreshingTaget, self.beginRefreshingAction, self);
Too many arguments to function call, expected 0, have *
問了下度娘束昵,
選中項(xiàng)目 - Project - Build Settings - ENABLE_STRICT_OBJC_MSGSEND 將其設(shè)置為 NO 即可
問題4:Undefined symbols for architecture i386: 問題
Undefined symbols for architecture i386:
"_sqlite3_backup_finish", referenced from:
_loadOrSaveDb in FMDatabase+InMemoryOnDiskIO.o
"_sqlite3_backup_init", referenced from:
_loadOrSaveDb in FMDatabase+InMemoryOnDiskIO.o
"_sqlite3_backup_step", referenced from:
_loadOrSaveDb in FMDatabase+InMemoryOnDiskIO.o
"_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
"_sqlite3_bind_parameter_index", referenced from:
-[FMDatabase executeQuery:withArgumentsInArray:orDictionary:orVAList:] in FMDatabase.o
-[FMDatabase executeUpdate:error:withArgumentsInArray:orDictionary:orVAList:] in FMDatabase.o
這個(gè)錯(cuò)誤的發(fā)生原因一般是“XXX”這個(gè)文件(類庫)雖然引入了工程中绍载,但是由于種種原因(常見于多人開發(fā),svn同步不規(guī)范)導(dǎo)致“XXX”并未被添加到project.pbxproj這個(gè)文件中两波。
解決方法是點(diǎn)擊工程瞳步,在targets界面中找到Build Phases,根據(jù)提示信息“XXX”來判斷缺少什么文件腰奋,一般如果缺少自定義的文件单起,XXX會(huì)是缺少的類名,那么就在Complie Sources中加入該文件劣坊。如果缺少類庫嘀倒,則在Link Binary With Libraries中加入該類庫。
而上面問題是因?yàn)樯僭贚ink Binary With Libraries 中加入 libsqlite3.dylib 局冰,添加后就可以編譯通過测蘑。
Xcode 7 缺少 *.dylib庫的解決方法
Xcode7中 Link Binary With Libraries 沒有 *.dylib庫,只能找到對(duì)應(yīng)的 *.tbd康二,但不能代替使用碳胳,通過查找資料,嘗試后得到以下兩種解決方法赠摇。
1.Link Binary With Libraries 手動(dòng)添加
首先點(diǎn)擊 “+”
顯示搜索添加頁面固逗,點(diǎn)擊 Add Other
出現(xiàn)文件目錄頁面,快捷鍵 CMD+Shift+G (Go to the folder)藕帜,輸入/usr/lib烫罩,添加你需要的 *.dylib。
2.Build Phases 配置
project -> Build Phases ->Linking -> Other Linker Flag
添加 -l< 所需 dylib 的名稱 >
例如:libsqlite3.dylib -> -lsqlite3
問題5:在編譯RegexKitLite的時(shí)候洽故,報(bào)錯(cuò)如下:
Undefined symbols for architecture i386:
"_uregex_open", referenced from:
_rkl_getCachedRegex in RegexKitLite.o
"_uregex_groupCount", referenced from:
_rkl_getCachedRegex in RegexKitLite.o
"_uregex_setText", referenced from:
_rkl_setCachedRegexToString in RegexKitLite.o
解決辦法:
在項(xiàng)目的編譯設(shè)置中找到Build settings->Linking->Other Linker Flags贝攒,然后在后面字段空白處雙擊,
添加“-licucore”就可以了时甚。
問題6: "OBJC_CLASS$MFMessageComposeViewController", referenced from:
l_OBJC$CATEGORY_MFMessageComposeViewController$_BlocksKit in BlocksKit(BlocksKit)
原因:
這是編譯器找不到符號(hào)定義隘弊,通常這意味著某些framework沒有加入項(xiàng)目中
解決參考:
解讀信息哈踱,是因?yàn)檎也坏浇蠱FMessageComposeViewController的ObjC類。
查找MFMessageComposeViewController的信息梨熙,得知其定義在MessageUI.framework中开镣,將其加入到項(xiàng)目中即可
問題7:"OBJC_CLASS$_CTTelephonyNetworkInfo", referenced from:
解決方法:在build phases里加一下 CoreTelephony.framework就可以了
問題8: Xcode "_deflate", referenced from:
解決辦法:添加libz.dylib類庫
問題9:iOS真機(jī)調(diào)試的時(shí)候報(bào)錯(cuò):/libUPPayPlugin.a(UPJSON.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
error: linker command failed with exit code 1 (use -v to see invocation)
解決辦法:看看是不是bitcode開著呢,把bitcode改為no
問題10:
XCTest/XCTest.h not found on old projects built in Xcode
問題描述:
fatal error: 'XCTest/XCTest.h' file not found
import 解決方法: 在報(bào)錯(cuò)的Target中的Building settings中FRAMEWORK_SEARCH_PATHS添加$(PLATFORM_DIR)/Developer/Library/Frameworks
XCTest/XCTest.h <wbr>not <wbr>found <wbr>on <wbr>old <wbr>projects <wbr>built <wbr>in <wbr>Xcode
問題11:添加第三方類庫造成的linker command failed with exit code 1 (use -v to see invocation)的錯(cuò)誤調(diào)試
linker command failed with exit code 1 (use -v to see invocation)這個(gè)錯(cuò)誤貌似遇見并不止一次咽扇,當(dāng)我想用某個(gè)第三方類庫的時(shí)候(如SBJson)邪财,我直接把類庫文件copy到工程目錄里面,然后一編譯就出現(xiàn)這樣錯(cuò)誤(并不是一定會(huì)出這樣錯(cuò)誤)质欲,開始以為是網(wǎng)上下載的類庫本身問題树埠,所以重新找類庫或者其他方式將它添加進(jìn)去,只要不出錯(cuò)就行嘶伟,也一直沒有深入了解根本問題怎憋,今天在給工程添加一個(gè)FMDB(SQLIte第三方類庫)文件編譯時(shí)又出現(xiàn)這種錯(cuò)誤,一開始以為工程問題九昧,但是新建工程后還是出現(xiàn)這個(gè)問題绊袋,經(jīng)過網(wǎng)上查找,得到了解決辦法耽装;
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_FMDatabase", referenced from:
objc-class-ref in ViewController.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
在網(wǎng)上得到解決辦法是:
在工作左邊導(dǎo)航欄Target-->Build Phases-->compile Sources中愤炸,第三庫庫的所有.m文件都添加到里面期揪,然后編譯通過了掉奄;
添加.m文件
根據(jù)對(duì)比可以看見 in FMDBTest,FMDBTest的Target里添加進(jìn)去了了一些.m文件
對(duì)于以上錯(cuò)誤,根據(jù)網(wǎng)友解答我的理解是
我們?cè)谑褂眠@些第三方類庫文件時(shí)直接將其拖拽到工程之中凤薛,編譯的的時(shí)候Xcode也沒有自動(dòng)引用姓建,所以造成這樣錯(cuò)誤,這就需要我們手動(dòng)添加缤苫。假如我們?cè)诠こ讨行陆硞€(gè)文件就不會(huì)出現(xiàn)這樣問題速兔;
問題12:
關(guān)于導(dǎo)入文件錯(cuò)誤:too many errors emitted, stopping now [-ferror-l
解決方法:build settings 里 Compile Sources As選項(xiàng)改為Objective C++。
問題13:dyld: Library not loaded: @rpath/XCTest.framework/XCTest
Referenced from: /var/containers/Bundle/Application/B5212ED6-4ECE-4BCC-A52A-689CBD400E44/02 - album.app/02 - album
Reason: image not found
解決方法:多加了兩個(gè)m文件活玲,下圖中m文件刪除即可
問題14:
Unsupported compiler 'com.apple.compilers.llvmgcc42' selected for architecture 'armv7'
解決方法:
Change your compiler for C/C++/ObjectiveC Go to Build Settings->Build OPtions->compiler for C/C++/ObjectiveC; select Default(Apple LLVM5.0)