iOS - 教你製作SDK和.a靜態庫

轉載自:http://blog.csdn.net/boring_cat/article/details/52807294


公司近期和其他公司合作 其他公司需要我們提供一個sdk等供給他們公司的員工進行二次開發。
之前沒接觸過,但人嘛,進步都是被逼的,今日就寫了一個小demo來說說如何製作.a文件的靜態庫。

寫在前面的話,什麼是庫?
庫就是封裝好功能的程序代碼,當我們引用庫的時候,我們就可以使用這些已經實現好的功能。

根據代碼是否公開的情況,庫又分爲兩種類型:開源庫和閉源庫。

開源庫:
開源庫顧名思義就是公開源代碼,能看到具體實現,開發者可以修改裏面的內容爲己所用。
開源庫有很多,比如常用的:
FMDB、SDWebImage、AFNetworking、SVProgressHUD等等

閉源庫:
不公開代碼實現部分,只公開.h文件,供開發者調用,經過編譯後的二進制文件,不能修改代碼
比如支付寶、微信支付等第三方SDK
閉源庫主要有兩類:靜態庫、動態庫

靜態庫和動態庫的存在形式
靜態庫:.a和.framework
動態庫:.dylib和.framework

靜態庫和動態庫在使用上的區別
靜態庫在鏈接時就會被完整地複製到可執行文件,多次使用就多次複製,造成代碼冗餘
動態庫在鏈接時不會進行復制,而是由程序運行時系統動態加載到內存,供程序調用,只加載一次,節省內存
注意:項目中若有自制動態庫,不能被上傳到AppStore。

準備就緒,開始製作.a
1.新建項目 -> 選擇“Cocoa Touch Static Library”

Cocoa Touch Static Library

2.在工程裏寫你需要的代碼(或者是你從別處拖進來的文件都ok)
TestLib.h文件公開helloworld方法
TestLib.h文件

TestLib.m實現helloworld方法(這些方法之後會隱藏,下文會提到)
TestLib.m

3.配置工程:
配置工程

4.編譯文件,打包到.a中的.m文件
編譯文件

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

Release-iphoneos 文件夾裏面的東西是用在真機上的

Release-iphonesimulator 文件夾裏面的東西是用在模擬器上的

如果 Scheme 是 Debug 模式,生成的文件夾就以 Debug 開頭

操作步驟如圖:
點擊edit scheme
1
2

6.選擇真機設備,然後編譯(Command+B),libTestLib.a變成黑色,文件存在
會在Release-iphoneos文件夾裏,
真機

7.再選擇模擬器編譯一遍,最好選擇高級的,因爲選擇低級的以後高級也許適配不了,
文件會存在Release-iphonesimulator文件夾裏
模擬器

(注意,若6和7的順序顛倒,也可以,就是先操作7的話,不會變成黑色,誤以爲文件不存在)

8.右鍵點擊libTestLib.a文件,在文件夾中顯示
8.1
8.2

把release-iphonesimulator文件夾和release-iphoneos文件夾整個拷貝出來,放在桌面上新建的文件夾(名稱自定義),方便操作。
自定義文件夾

9.合併模擬器(release-iphonesimulator)和真機(release-iphoneos)下的.a,以便支持真機和模擬器,合併後的大小大約是兩個文件加起來這麼大。
打開終端輸入:

lipo -create /Users/momo/Desktop/dabao/Release-iphoneos/libTestLib.a /Users/momo/Desktop/dabao/Release-iphonesimulator/libTestLib.a -output /Users/momo/Desktop/dabao/test.a

格式: lipo -create 真機下的.a路徑(空格) 模擬器下的.a路徑(空格) -output (空格) 合成後的路徑及名稱
注意 :空格和重要

之後你將看到你的路徑下會產生一個新文件 就是合併後的靜態庫
test.a就是我命名的靜態庫
test.a

檢查合併後的.a滿足條件,在終端輸入:

lipo -info /Users/momo/Desktop/dabao/test.a

格式: lipo -info /Users/momo/Desktop/dabao/test.a

之後將看到:
結果

10..a文件製作成功後,使用:
注意:圖片資源需要另外自添加!

運行

調用helloworld方法成功。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章