天天看點

手把手教你制作.a靜态庫(iOS開發)

知識普及:

什麼是庫?

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

根據源代碼的公開情況,庫可以分為 2 種類型

開源庫

公開源代碼,能看到具體實作

比如 SDWebImage 、 AFNetworking

閉源庫

不公開源代碼,是經過編譯後的二進制檔案,看不到具體實作

主要分為:靜态庫、動态庫

靜态庫和動态庫

靜态庫和動态庫的存在形式

靜态庫: .a 和 .framework

動态庫: .dylib 和 .framework

靜态庫和動态庫在使用上的差別

靜态庫:連結時,靜态庫會被完整地複制到可執行檔案中, 被多次使用就有多份備援拷貝 (左圖所示)

動态庫:連結時不複制,程式運作時由系統動态加載到記憶體,供程式調用,系統隻加載一次,多個程式共用,節省記憶體 (右圖所示)

手把手教你制作.a靜态庫(iOS開發)
手把手教你制作.a靜态庫(iOS開發)

需要注意的是:項目中如果使用了自制的動态庫,不能被上傳到 AppStore!

制作 .a

1、建立項目-> 選擇 “Cocoa Touch Static Library”

手把手教你制作.a靜态庫(iOS開發)

2、添加庫需要包含的源代碼,将你工程裡的代碼添加到打靜态庫工程裡:

手把手教你制作.a靜态庫(iOS開發)
手把手教你制作.a靜态庫(iOS開發)

3、配置一下工程:

手把手教你制作.a靜态庫(iOS開發)

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

手把手教你制作.a靜态庫(iOS開發)
手把手教你制作.a靜态庫(iOS開發)

需要暴漏出的檔案類在這裡設定:

手把手教你制作.a靜态庫(iOS開發)

引入的網絡架構設定:(有些會自動引入,有些需要手動引入,根據編譯報錯,可以檢查。)

手把手教你制作.a靜态庫(iOS開發)

5、編譯前檢查一下是debug模式還是release模式,選擇release模式:

分debug和release模式:

Debug-iphoneos 檔案夾裡面的東西是用在真機上的

Debug-iphonesimulator 檔案夾裡面的東西是用在模拟器上的

如果 Scheme 是 Release 模式,生成的檔案夾就以 Release 開頭

手把手教你制作.a靜态庫(iOS開發)
手把手教你制作.a靜态庫(iOS開發)

6、選擇真機裝置,然後 Command+B 編譯, libSPCustomerServerse.a 檔案從紅色變為黑色

(注意建議先選擇真機,這樣才會變色,如果先選擇模拟器,那麼編譯通過了,但是不會由紅變黑,實際上是已經編譯了模拟器的,隻是給人一種假象,好像沒編譯一樣,還是紅色的)

手把手教你制作.a靜态庫(iOS開發)
手把手教你制作.a靜态庫(iOS開發)

7、選擇模拟器,建議選擇iPhone6以上的(選擇進階點的,低級的也可用,若選了低級的,進階的有可能就不适配了)然後依然 Command+B 編譯,模拟器和真機環境下用的 .a 檔案是分開的。

手把手教你制作.a靜态庫(iOS開發)

8、合并模拟器(release-iphonesimulator)和真機(release-iphoneos)下的.a,以便支援真機和模拟器,合并後的.a大小大約是不合并的2倍左右。

show in finder

手把手教你制作.a靜态庫(iOS開發)

合并步驟:

舉例:1、建立檔案夾:"dabao";

2、将上述的release-iphonesimulator和release-iphoneos兩個檔案拷貝進"dabao"檔案夾。

手把手教你制作.a靜态庫(iOS開發)

3、打開終端,執行以下操作:

一、在終端輸入:lipo  -create 

二、将release-iphonesimulator下的.a拖進終端,輸入一個空格;

三、繼續将release-iphoneos 下.a 拖進終端,輸入空格;

四、繼續輸入:-output ,打個空格;

五、輸入合并後的.a所要放的檔案路徑(這裡舉例依然放在“dabao”這個檔案夾下,則我的電腦的路徑為:/Users/ntalker-zhou/Desktop/dabao/libSPCustomerServerseSDK.a),回車,在相應的檔案下即可生成一個.a,該.a即是合并後的.a

手把手教你制作.a靜态庫(iOS開發)

4、檢查合并後的.a是不是滿足所有要求,依然在終端進行以下操作:

一、在終端輸入:lipo  -info   ;

二、将合并後的.a拖進終端 ,回車;

手把手教你制作.a靜态庫(iOS開發)

(注意:終端每一步記得要用空格隔開,否則會出錯哦!)

這樣.a 就成功制作出了,隻需要将暴漏的頭檔案以及制作的.a放入工程,别人就可以使用你的程式了,再也不用擔心源碼暴漏或别人随意修改你的代碼了,不過如果有圖檔資源,圖檔資源是不能打進.a的,需要在外面添加的哦。

(有時候為了編譯通過,根據需要,需要設定一下工程配置比如我需要配置xml等…

文/哇哇卡(簡書作者)

原文連結:http://www.jianshu.com/p/a1dc024a8a15#

著作權歸作者所有,轉載請聯系作者獲得授權,并标注“簡書作者”。

本文轉自ljianbing51CTO部落格,原文連結:http://blog.51cto.com/ljianbing/1887229 ,如需轉載請自行聯系原作者