手把手教你制作.a靜態(tài)庫(iOS開發(fā))

知識普及:

什么是庫?

庫是程序代碼的集合,是共享程序代碼的一種方式

根據(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)系作者獲得授權,并標注“簡書作者”。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容