在iOS中使用第三方類庫(kù)
方法一:直接復(fù)制所有源文件到項(xiàng)目中
這種方法就是把第三方類庫(kù)的所有源文件復(fù)制到項(xiàng)目中,直接把所有.h和.m文件拖到XCode項(xiàng)目中即可。如果第三方類庫(kù)引用了一些系統(tǒng)自帶類庫(kù),那么在項(xiàng)目中還需要額外引用那些類庫(kù)。
如果當(dāng)前的項(xiàng)目啟用了ARC,而引用的第三方類庫(kù)未使用ARC,那還需要在項(xiàng)目信息的Targets – Build Parses里找到第三方類庫(kù)的.m文件,并為它們加上-fno-objc-arc標(biāo)記。
而對(duì)于在未啟用ARC的項(xiàng)目用引用使用了ARC的第三方類庫(kù),則需要為第三方類庫(kù)的.m文件加上-fobjc-arc標(biāo)記。
另外,在源代碼中可以通過(guò)一個(gè)編譯器指令__has_feature(objc_arc)來(lái)檢測(cè)項(xiàng)目是否使用了ARC,具體見http://clang.llvm.org/docs/LanguageExtensions.html#langext-has-feature-has-extension。
方法二:引用.xcodeproj生成靜態(tài)鏈接庫(kù)并引用
首先,在XCode中把第三方類庫(kù)的.xcodeproj文件拖到當(dāng)前項(xiàng)目中;如果第三方類庫(kù)封裝了一些資源在.bundle文件里,那么.bundle文件需要和.xcodeproj一起拖到項(xiàng)目中。
然后,在項(xiàng)目的Targets – Summary – Linked Frameworks and Libraries或者在Targets – Build Phases – Link Binary With Libraries添加第三方類庫(kù)生成的靜態(tài)鏈接庫(kù)引用。
接著,還需要在Targets – Build Settings – Search Paths的User Header Search Paths參數(shù)中加入第三方類庫(kù)的頭文件路徑,可以是絕對(duì)路徑如:/Users/libpath,也可以是相對(duì)路徑(相對(duì)于當(dāng)前項(xiàng)目文件夾)如:../**。
最后,有些靜態(tài)鏈接庫(kù)引用進(jìn)來(lái)可能還需要增加一些標(biāo)記,在Targets – Build Settings – Linking的Other Linker Flags參數(shù)中增加:-Objc, –all_load這一類標(biāo)記。
通過(guò)以上幾步,一般都可以成功編譯。
當(dāng)然還有一些例外的情況:
- 當(dāng)前項(xiàng)目和第三方類庫(kù)同時(shí)使用了另外的一些第三方類庫(kù),這個(gè)時(shí)候還需要額外做一些處理才能成功編譯:在引用的第三方類庫(kù)的.xcodeproj項(xiàng)目 – Targets – Build Phases中的Compile Sources和Copy Headers把重復(fù)的.m和.h文件移除掉。
- 第三方類庫(kù)引用的一些系統(tǒng)自帶類庫(kù),如果項(xiàng)目中沒(méi)有引用,也可能會(huì)引起編譯錯(cuò)誤,這時(shí)還需要在項(xiàng)目中引用第三方類庫(kù)引用的一些系統(tǒng)自帶類庫(kù)。比如:第三方類庫(kù)引用了QuartzCore.framework,而項(xiàng)目中未引用QuartzCore.framework則可能引起編譯錯(cuò)誤,就需要在項(xiàng)目中也引用QuartzCore.framework。



























