知識普及:
什么是庫?
庫是程序代碼的集合,是共享程序代碼的一種方式
根據(jù)源代碼的公開情況,庫可以分為 2 種類型
開源庫
公開源代碼,能看到具體實現(xiàn)
比如 SDWebImage 、 AFNetworking
閉源庫
不公開源代碼,是經(jīng)過編譯后的二進制文件,看不到具體實現(xiàn)
主要分為:靜態(tài)庫、動態(tài)庫
靜態(tài)庫和動態(tài)庫
靜態(tài)庫和動態(tài)庫的存在形式
靜態(tài)庫: .a 和 .framework
動態(tài)庫: .dylib 和 .framework
靜態(tài)庫和動態(tài)庫在使用上的區(qū)別
靜態(tài)庫:鏈接時,靜態(tài)庫會被完整地復制到可執(zhí)行文件中, 被多次使用就有多份冗余拷貝 (左圖所示)
動態(tài)庫:鏈接時不復制,程序運行時由系統(tǒng)動態(tài)加載到內存,供程序調用,系統(tǒng)只加載一次,多個程序共用,節(jié)省內存 (右圖所示)


需要注意的是:項目中如果使用了自制的動態(tài)庫,不能被上傳到 AppStore!
制作 .a
1、新建項目-> 選擇 “Cocoa Touch Static Library”

2、添加庫需要包含的源代碼,將你工程里的代碼添加到打靜態(tài)庫工程里:


3、配置一下工程:

4、選擇需要暴露出來的 .h 文件, .m 文件會自動編譯到 .a 文件中:


需要暴漏出的文件類在這里設置:

引入的網(wǎng)絡框架設置:(有些會自動引入,有些需要手動引入,根據(jù)編譯報錯,可以檢查。)

5、編譯前檢查一下是debug模式還是release模式,選擇release模式:
分debug和release模式:
Debug-iphoneos 文件夾里面的東西是用在真機上的
Debug-iphonesimulator 文件夾里面的東西是用在模擬器上的
如果 Scheme 是 Release 模式,生成的文件夾就以 Release 開頭


6、選擇真機設備,然后 Command+B 編譯, libSPCustomerServerse.a 文件從紅色變?yōu)楹谏?/p>
(注意建議先選擇真機,這樣才會變色,如果先選擇模擬器,那么編譯通過了,但是不會由紅變黑,實際上是已經(jīng)編譯了模擬器的,只是給人一種假象,好像沒編譯一樣,還是紅色的)


7、選擇模擬器,建議選擇iPhone6以上的(選擇高級點的,低級的也可用,若選了低級的,高級的有可能就不適配了)然后依然 Command+B 編譯,模擬器和真機環(huán)境下用的 .a 文件是分開的。

8、合并模擬器(release-iphonesimulator)和真機(release-iphoneos)下的.a,以便支持真機和模擬器,合并后的.a大小大約是不合并的2倍左右。
show in finder

合并步驟:
舉例:1、新建文件夾:"dabao";
2、將上述的release-iphonesimulator和release-iphoneos兩個文件拷貝進"dabao"文件夾。

3、打開終端,執(zhí)行以下操作:
一、在終端輸入:lipo ?-create
二、將release-iphonesimulator下的.a拖進終端,輸入一個空格;
三、繼續(xù)將release-iphoneos 下.a 拖進終端,輸入空格;
四、繼續(xù)輸入:-output ,打個空格;
五、輸入合并后的.a所要放的文件路徑(這里舉例依然放在“dabao”這個文件夾下,則我的電腦的路徑為:/Users/ntalker-zhou/Desktop/dabao/libSPCustomerServerseSDK.a),回車,在相應的文件下即可生成一個.a,該.a即是合并后的.a

4、檢查合并后的.a是不是滿足所有要求,依然在終端進行以下操作:
一、在終端輸入:lipo ?-info ? ;
二、將合并后的.a拖進終端 ,回車;

(注意:終端每一步記得要用空格隔開,否則會出錯哦!)
這樣.a 就成功制作出了,只需要將暴漏的頭文件以及制作的.a放入工程,別人就可以使用你的程序了,再也不用擔心源碼暴漏或別人隨意修改你的代碼了,不過如果有圖片資源,圖片資源是不能打進.a的,需要在外面添加的哦。
(有時候為了編譯通過,根據(jù)需要,需要設置一下工程配置比如我需要配置xml等…
文/哇哇卡(簡書作者)
原文鏈接:http://m.itdecent.cn/p/a1dc024a8a15
著作權歸作者所有,轉載請聯(lián)系作者獲得授權,并標注“簡書作者”。