iOS打包靜態(tài)庫(SDK)流程

前言:

iOS的軟件開發(fā)工具包SDK,一般是以庫的形式出現(xiàn)蔚约,從本質上來說是一種可執(zhí)行代碼的二進制格式奄妨,可以被載入內存中執(zhí)行。開發(fā)過程中苹祟,我們常常會用到第三方的SDK砸抛。尤其是微信、QQ树枫、百度地圖直焙、支付功能等。其實我們也可以制作屬于自己的庫文件呢砂轻?如果奔誓,將自己寫的功能類編譯成庫文件,分發(fā)給其他人來使用呢搔涝?

庫分 靜態(tài)庫 和 動態(tài)庫 兩種:

1厨喂、靜態(tài)庫有 .a 和 .framework兩種形式和措;

2、動態(tài)庫有.dylib 和 .framework 形式蜕煌,后來.dylib動態(tài)庫又被蘋果替換成.tbd的形式派阱。

靜態(tài)庫和動態(tài)庫區(qū)別,是相對編譯期和運行期的:

1斜纪、靜態(tài)庫在程序編譯時會被鏈接到目標代碼中颁褂,程序運行時將不再需要改靜態(tài)庫;

2傀广、動態(tài)庫在程序編譯時并不會被鏈接到目標代碼中颁独,只是在程序運行時才被載入,因為在程序運行期間還需要動態(tài)庫的存在伪冰。

PS總結:

1誓酒、同一個靜態(tài)庫在不同程序中使用時,每一個程序中都得導入一次贮聂,打包時也被打包進去靠柑,形成一個程序;

2吓懈、而動態(tài)庫在不同程序中歼冰,打包時并沒有被打包進去,只在程序運行使用時耻警,才鏈接載入(如系統(tǒng)的框架如UIKit隔嫡、Foundation等),所以程序體積會小很多甘穿,但是蘋果不讓使用自己的動態(tài)庫腮恩,否則審核就無法通過。

這篇文章主要先針對.a文件靜態(tài)庫的制作過程進行闡述温兼,好了下面我們開始吧秸滴!

1、新建靜態(tài)庫募判,如圖示:

創(chuàng)建完工程之后我們進入看到的是這樣的:

新創(chuàng)建出來的.a庫還沒有進行編譯荡含,所以還沒有生成,顯示為紅色(run之后就變成了黑色)

2届垫、如何編譯一個.a靜態(tài)庫文件:

我們可以在系統(tǒng)默認的CYBCount.h和CYBCount.m進行編寫自己的代碼释液,也可以刪除后新建文件進行代碼的開發(fā),這里不做過多介紹敦腔,下面以系統(tǒng)默認的文件為例寫入一個方法均澳,并暴露在.h中:

+(void)MyFirstSDKAction{

NSLog(@"It is my first SDK test.");

}

然后修改導入的靜態(tài)庫文件配置,如下所示:

點擊之后符衔,按照以下步驟操作:

PS:如果不將【Build Configuration】改為Release找前,則打包出來的靜態(tài)庫會存于Debug-iphoneos和Debug-iphonesimulator兩個文件夾下。我們一般都使用Release模式判族,因為程序最終發(fā)布的是Release版的躺盛,所以靜態(tài)庫也是在Release模式下使用。

最后我們需要修改一下【Bulid Active Architecture Only】編譯的指令集形帮,如下圖:

PS:為什么我們要把【Bulid Active Architecture Only】的Release的設置這是為NO呢槽惫?

模擬器:iPhone4s~5 : i386

iPhone5s~6plus : x86_64

真 機:iPhone3gs~4s : armv7

iPhone5~5c : armv7s

iPhone5s~6plus : arm64

如何設置為YES,那么編譯出來的 .a 靜態(tài)庫就只包含當前設備的指令集辩撑。

舉個例子:若我們選擇iPhone 5模擬器Command+B編譯界斜,則編譯出來的 .a 靜態(tài)庫只能用iPhone4s~5模擬器跑程序,用iPhone5s~6plus合冀,則會報找不到x86_64的libMyFriSDK.a庫各薇。

設置為NO,則會把所有指令集的都打包合并君躺。

修改了編譯的指令集之后峭判,我們對工程進行編譯,快捷鍵Command+B

注意編譯時棕叫,需要用 模擬器 和 真機 各編譯一次林螃,這樣Products目錄下的libMyFriSDK.a靜態(tài)庫才會變?yōu)楹谏益Ishow in Finder俺泣,可以進入Products目錄下疗认,如下圖:

通過模擬器和真機各編譯一次后,我們可以在Products目錄下看到兩個文件夾:

Release-iphoneos文件夾里面有【真機】使用的.a靜態(tài)庫文件伏钠;

Release-iphonesimulator文件夾里面的是【模擬器】使用的.a靜態(tài)庫文件侮邀;

讓我們分別用命令行l(wèi)ipo -info XXXX.a的形式來查看這兩個.a文件的兼容屬性是什么吧,如下圖:

可以看出:支持真機的屬性包括armv7和arm64贝润;支持模擬器的屬性包括i386和x86_64

3绊茧、如何合并一個.a靜態(tài)庫文件

好了到了最后一步了,合并靜態(tài)庫打掘,步驟如下:

如果想要通用的靜態(tài)庫华畏,那我們需要將 模擬器使用的靜態(tài)庫 與 真機使用的靜態(tài)庫 合并成一個靜態(tài)庫,可以使用終端命令來實現(xiàn)尊蚁,如下圖:

命令格式:lipo -create 真機里.a文件的絕對路徑 第二個模擬器里.a文件的絕對路徑 -output 最終的.a文件路徑亡笑。 記得每一個文件路徑輸入后都需要用 空格 隔開哦

本文使用的命令如下:

lipo -create /Users/soutsubamehei/Library/Developer/Xcode/DerivedData/CYBCount-cxopjbchxzrxoafkulsubkazfkhr/Build/Products/Release-iphoneos/libCYBCount.a /Users/soutsubamehei/Library/Developer/Xcode/DerivedData/CYBCount-cxopjbchxzrxoafkulsubkazfkhr/Build/Products/Release-iphonesimulator/libCYBCount.a -output /Users/soutsubamehei/Desktop/CYBCount/CYBCountSDK.a

終端執(zhí)行完此命令之后,如圖:

沒有任何報錯信息横朋,證明.a文件已經成功生成仑乌,此時可以去自己設置的合并后的路徑中進行查看:

可以看到,.a文件已經成功生成,可以在終端看一下它所支持的屬性晰甚,如圖:

可以看到衙传,現(xiàn)在合成后的.a包已經支持所有屬性了。

PS:這里有人就很疑惑了為什么真機沒有armv7s架構厕九,那是否支持5和5c呢蓖捶?經過與身邊的一些用過合并的大神實踐操作證實,其實是可以兼容這兩種特殊機型的扁远,大家可以嘗試一下俊鱼!

4、如何集成通用.a靜態(tài)庫文件到項目中

將以上合并的通用版本的靜態(tài)庫文件libSDK.a還有你需要引用的.h頭文件拖入項目中即可畅买。這時你的靜態(tài)庫并闲,可以使用真機+模擬器,大功告成谷羞!~

【以上操作純屬個人見解帝火,有大神路過勿噴,如有雷同純屬巧合】

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末洒宝,一起剝皮案震驚了整個濱河市购公,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌雁歌,老刑警劉巖宏浩,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異靠瞎,居然都是意外死亡比庄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門乏盐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來佳窑,“玉大人,你說我怎么就攤上這事父能∩翊眨” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵何吝,是天一觀的道長溉委。 經常有香客問我,道長爱榕,這世上最難降的妖魔是什么瓣喊? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮黔酥,結果婚禮上藻三,老公的妹妹穿的比我還像新娘洪橘。我一直安慰自己,他們只是感情好棵帽,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布熄求。 她就那樣靜靜地躺著马昙,像睡著了一般祭玉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天仗谆,我揣著相機與錄音,去河邊找鬼淑履。 笑死隶垮,一個胖子當著我的面吹牛,可吹牛的內容都是我干的秘噪。 我是一名探鬼主播狸吞,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼指煎!你這毒婦竟也來了蹋偏?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤至壤,失蹤者是張志新(化名)和其女友劉穎威始,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體像街,經...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡黎棠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了镰绎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脓斩。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖畴栖,靈堂內的尸體忽然破棺而出随静,到底是詐尸還是另有隱情,我是刑警寧澤吗讶,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布燎猛,位于F島的核電站,受9級特大地震影響关翎,放射性物質發(fā)生泄漏扛门。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一纵寝、第九天 我趴在偏房一處隱蔽的房頂上張望论寨。 院中可真熱鬧星立,春花似錦、人聲如沸葬凳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽火焰。三九已至劲装,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間昌简,已是汗流浹背占业。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纯赎,地道東北人谦疾。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像犬金,于是被迫代替她去往敵國和親念恍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內容