簡(jiǎn)介
??iOS中,庫(kù)有兩種:靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù),靜態(tài)庫(kù)分為.a和.framework,動(dòng)態(tài)庫(kù)分為.dylib和.framework。其區(qū)別在于:鏈接靜態(tài)庫(kù)的時(shí)候,靜態(tài)庫(kù)會(huì)被完整地復(fù)制到可執(zhí)行文件中,被多次使用就會(huì)被多次復(fù)制;而鏈接動(dòng)態(tài)庫(kù)的時(shí)候,動(dòng)態(tài)庫(kù)不會(huì)被復(fù)制,程序運(yùn)行的時(shí)候,系統(tǒng)會(huì)將庫(kù)動(dòng)態(tài)加載到內(nèi)存中,供程序調(diào)用,且只加載一次,多個(gè)程序共用,節(jié)省內(nèi)存空間。
??需要注意的是,iOS系統(tǒng)不允許使用自定義動(dòng)態(tài)庫(kù),如果項(xiàng)目中使用到了自定義動(dòng)態(tài)庫(kù),那么是不可上傳到AppStore的。
??本文僅就靜態(tài)庫(kù)的開(kāi)發(fā)與調(diào)試做簡(jiǎn)要筆記,便于翻閱查詢。
靜態(tài)庫(kù)的開(kāi)發(fā)與調(diào)試
??靜態(tài)庫(kù)分為.a和.framework兩種形式,本文選取.framework的開(kāi)發(fā)來(lái)做記錄。
1.使用xcode新建項(xiàng)目,項(xiàng)目模板使用Framework&Library中的Cocoa Touch Framework,本文庫(kù)項(xiàng)目命名為“LVLibrary”如下圖所示:

2.如果不需要系統(tǒng)默認(rèn)生成的頭文件,刪除即可。新建LVLibrary類,繼承自NSObject,添加一個(gè)拼接字符串的測(cè)試方法
+ (NSString *)joinString:(NSArray *)arr withSeparator:(NSString *)separator{
if (arr.count == 0) {
return nil;
}
NSMutableString * mStr = [[NSMutableString alloc] init];
for (int i = 0; i < arr.count; i++) {
[mStr appendString:arr[i]];
if (separator && (i != arr.count - 1)) {
[mStr appendString:separator];
}
}
return mStr;
}
3.修改模板類型。使用該模板新建的項(xiàng)目,生成的庫(kù)默認(rèn)的是動(dòng)態(tài)庫(kù),需要修改。找到“Build Settings -> Linking -> Mack-O Type”將值由“Dynamic Library”修改為“Static Library”,如下圖所示:

4.暴露頭文件。一個(gè)庫(kù)中可能會(huì)包含很多個(gè)類,根據(jù)需要將頭文件暴露出去。找到“Build Phases -> Headers”, 設(shè)置頭文件。默認(rèn)情況下,所有的頭文件都是在Project中,將需要暴露的頭文件,從Project拖動(dòng)到Public即可。

至此,庫(kù)工程的相關(guān)配置完畢。
接下來(lái),就是在項(xiàng)目進(jìn)行調(diào)試了。
1.新建項(xiàng)目,本文選取Single View App,命名為L(zhǎng)VLibraryDemo。
2.關(guān)閉庫(kù)工程(LVLibrary),然后將庫(kù)的工程文件“LVLibrary.xcodeproj”,拖動(dòng)到測(cè)試項(xiàng)目LVLibraryDemo中。

添加完畢后,如果發(fā)現(xiàn)在測(cè)試工程中,庫(kù)工程沒(méi)法展開(kāi),也就是上圖中紅框左側(cè)沒(méi)有小三角,是因?yàn)閹?kù)工程(LVLibrary)沒(méi)有關(guān)閉,將之關(guān)閉即可。
3.配置測(cè)試工程。找到測(cè)試工程的Target Dependencies和Link Binary With Libraries,添加“LVLibrary”,如下圖:


4.修改搜索路徑。配置完上面的選項(xiàng)后,如果開(kāi)始使用庫(kù),可能會(huì)找不到頭文件的錯(cuò)誤,這時(shí)需要添加搜索路徑,將庫(kù)的頭文件的路徑加入到“Header Search Paths”中(可以將庫(kù)文件的某個(gè)頭文件直接拖動(dòng)過(guò)去,然后參數(shù)文件名,保留到最有一個(gè)文件夾即可),并且將路徑的搜索模式修改為recursive。

至此,就可以在項(xiàng)目中開(kāi)發(fā)調(diào)試靜態(tài)庫(kù)了。