一、靜態(tài)庫和動態(tài)庫的區(qū)別
靜態(tài)庫和動態(tài)庫是相對編譯期和運行期的,在存在形式上,靜態(tài)庫是以 .a 和 .framework 形式存在,動態(tài)庫是以.dylib 和 .framework形式存在的;在使用上,鏈接時,靜態(tài)庫會被完整地復(fù)制到可執(zhí)行文件中,被多次使用就有多份冗余拷貝,而動態(tài)庫鏈接時不復(fù)制,程序運行時由系統(tǒng)動態(tài)加載到內(nèi)存,供程序調(diào)用,系統(tǒng)只加載一次,多個程序共用,節(jié)省內(nèi)存。
二、關(guān)于靜態(tài)庫
靜態(tài)庫分為:真機—Debug(調(diào)試)版本、 真機—Release(發(fā)布)版本、模擬器—Debug版本、模擬器—Release版本,開發(fā)中一般都打包Release(發(fā)布)版本,將真機和模擬器版本合并,提供外界。剛開始不明白這個,然后使用的Debug版本生成點a文件,在項目中使用一直報錯。
三、創(chuàng)建.a靜態(tài)庫
1、新建項目,點擊iOS—Framework&—Cocoa Touch Static Library
給工程命名stone-bleApi-1.7.8
2、系統(tǒng)自動生成以工程名命名的.h和.m文件,可自定義的在目錄下添加或刪除文件,注意目錄下Products文件夾有一個.a文件為紅色,說明文件并不存在。這里我們將系統(tǒng)生成的.h和.m文件刪除。
刪除自動生成的.h和.m文件,然后將已經(jīng)寫好的類拖進來,如下圖所示:
3、點擊Xcode左上角,選擇Edit Scheme,Build Configuration下選擇Release,先注意檢查下面Release是否為NO:Yes表示只編譯選中模擬器設(shè)備對應(yīng)的架構(gòu),No則為編譯所有模擬器設(shè)備支持的cup架構(gòu)(Debug版本同理),選擇NO,然后分別在模擬器和真機下Command+B編譯一下,會看到Products文件夾下的.a文件變?yōu)楹谏@個.a文件就是我們想要得到的靜態(tài)庫,這里會出現(xiàn)一個問題你先編譯的模擬器會發(fā)現(xiàn).a依然是紅色,你需要模擬器和真機都編譯后.a才會變成黑色,這應(yīng)該是Xcode本身的問題
4、分別選用真機模式編譯和模擬器編譯
5、找到編譯之后生成的.a文件,合并真機生成的.a文件和模擬器生成的.a文件,在終端輸入以下命令行:lipo -create 模擬器.a文件的路徑 真機.a文件的路徑 -output 合并后的保存路徑