xcode制作iOS靜態(tài)庫SDK<包含第三方.a或者.framework靜態(tài)庫>

1.介紹

  • 原本不打算在分開發(fā)一遍這個(gè)的,應(yīng)該是包含在這篇Flash Air ANE for iOS 集成最新版本的友盟統(tǒng)計(jì)SDK.framework功能中的,但是由于ANE的開發(fā)需求一般太少,這個(gè)靜態(tài)庫如何包含第三方SDK靜態(tài)庫又是我在開發(fā)ANE擴(kuò)展庫中遇到的一個(gè)大問題,折騰了好幾天才解決了這個(gè)問題速梗。而且網(wǎng)上問的人很多,且大多都沒有給出解決方案,所以還是單獨(dú)拎出一篇記錄一下刑桑。
  • 一般制作靜態(tài)庫的方法及靜態(tài)庫和動(dòng)態(tài)庫的詳細(xì)介紹,偷個(gè)懶借鑒一下別人的iOS靜態(tài)庫SDK制作,我覺得這篇不管從原理還是制作方法說的都是很詳細(xì)的远豺。32個(gè)贊!

2.工具

Xcode 8.2.1

3.需求

需求一英支、將第三方的靜態(tài)庫(*.a)打包進(jìn)我們自己的靜態(tài)庫中
需求二、將第三方靜態(tài)庫(.framework)打包進(jìn)我們自己的靜態(tài)庫中

需求一

我們以百度統(tǒng)計(jì)SDK為例子,將百度統(tǒng)計(jì)的功能集成到我們自己的靜態(tài)庫中去:

3.1 創(chuàng)建一個(gè)靜態(tài)庫項(xiàng)目蒂阱,選擇Static Library (生成.a的靜態(tài)庫,如果選擇Framework即生成.framework的靜態(tài)庫也可以是動(dòng)態(tài)庫 )

3.1

3.2 將靜態(tài)庫拖入到項(xiàng)目中靶溜,并勾選Add to Targets到庫中眯杏。


3.2.1
3.2.2

3.3 添加百度SDK所需要依賴的系統(tǒng)庫夜焦,這里添加的.dylib如果使用新的.tbd編譯會(huì)報(bào)錯(cuò),簡(jiǎn)單的處理就是還替換添加.dylib的庫<在Link Binary withLibaraies中點(diǎn)擊加號(hào)->Add Other...->Shift + Command + G組合鍵->輸入/usr/lib->找到需要添加的庫 如圖 2,3>


1.3.1
3.3.2
3.3.3

3.4 設(shè)置Build setting如下


1.4.1

3.5 分別設(shè)置編譯庫運(yùn)行環(huán)境Debug/Release,并分別選擇編譯Target Device為模擬器/Generic iOS device,運(yùn)行生成兩個(gè)版本的靜態(tài)庫.a文件:


3.5.1
3.5.2
3.5.3
3.5.4
3.5.5

3.6 靜態(tài)庫合并:通過lipo -create //debug.a //release.a -output universal.a命令將兩個(gè)靜態(tài)庫合成一個(gè)靜態(tài)庫適用于不同的編譯環(huán)境:這就制作完成了可以用了岂贩。


3.6.1
3.6.2
需求二

將第三方的.framework的庫包含進(jìn)我們的靜態(tài)庫中茫经,首先了解一下.framework和.a的靜態(tài)庫之間的區(qū)別借用:

Framework

Framework的英文釋意是框架,主要由Headers萎津、binary文件卸伞、.bundle這三部分構(gòu)成,除此之外還有Info.plist和Modules锉屈,后兩者主要記錄Framework的版本之類的信息荤傲,一般都會(huì)刪掉,不做討論

a).Headers
包含我們?cè)谥谱鱂ramework的時(shí)候暴露的頭文件颈渊,所有被暴露的.h都放在這里遂黍。
b).binary文件
整個(gè)Framework的核心,所有代碼都被編譯成了這樣一坨二進(jìn)制文件俊嗽,這里要注意的是添加的依賴庫不會(huì)被編譯進(jìn)來雾家,用的時(shí)候還需要重新link其他依賴庫。
c).bundle
資源文件都打包放在這里绍豁。在制作Framework的時(shí)候不可以把圖片直接放在項(xiàng)目中芯咧,否則制作好之后圖片是一張一張的出現(xiàn)在項(xiàng)目中非常亂,需要新建一個(gè)bundle將圖片放進(jìn)去竹揍,這里的bundle提供整個(gè)SDK的圖片資源敬飒。
注意:圖片放進(jìn)bundle之后不可以用[UIImage ImageWithName:]讀取圖片。要先找到bundle包再拿圖片鬼佣。
其實(shí)Framework既可以是靜態(tài)庫也可以是動(dòng)態(tài)庫驶拱,這取決于編譯成的Mach-O(就是那個(gè)二進(jìn)制文件)是動(dòng)態(tài)庫還是靜態(tài)庫,F(xiàn)ramework本質(zhì)上并不是一個(gè)庫晶衷,它是蘋果為了方便開發(fā)者提供了一種庫的打包方式蓝纲,F(xiàn)ramework會(huì)將Mach-O文件阴孟、頭文件和資源包全都包含進(jìn)來,不需要你再手動(dòng)整理税迷,我們也可以通過Xcode來制作framework動(dòng)態(tài)庫使用永丝。
所以總結(jié):Framework是庫的打包形式,既可以是動(dòng)態(tài)庫也是靜態(tài)庫箭养。

.a靜態(tài)庫

這類靜態(tài)庫與Framework基本類似慕嚷,不同的是在打包成.a文件的同時(shí),還需要提供頭文件毕泌,使用時(shí)相較于Framework比較麻煩喝检,(例如微信支付SDK使用的是.a,不同的是支付寶SDK是以framework的形式打包的)撼泛。.a這樣打包不夠方便挠说,而Framework編譯完成暴露的頭文件都已經(jīng)放好了。

.dylib/.tbd 動(dòng)態(tài)庫

這類動(dòng)態(tài)庫我們也經(jīng)常用愿题,基本上都是系統(tǒng)提供的损俭,一般不能自己制作,就算你通過其他方式制作使用潘酗,也肯定不能上架的杆兵,這里沒什么好講的。

其它

** 如果將第三方SDK的framework包含在自己的靜態(tài)庫中一種方法就是打包不打包進(jìn)自己的靜態(tài)庫中然后在調(diào)用靜態(tài)庫的時(shí)候再在程序中引入第三方的SDK即可**仔夺,iOS靜態(tài)庫SDK制作也有提到具體如何操作琐脏,.framewrok的庫確實(shí)無法整體直接打包進(jìn)靜態(tài)庫中。沒有辦法直接整體打包那么有沒有辦法間接的引入呢缸兔?

4.將第三方.framework集成到自己的靜態(tài)庫里寫一個(gè)完整的流程.

這里我已友盟的SDK作為例子,首先去友盟官網(wǎng)下載最新版本的SDK 友盟官網(wǎng)骆膝,解壓根據(jù)如下路徑找到二進(jìn)制文件

4.1.1

將UMMobClick的二進(jìn)制文件改成.a的后綴名,并且拖到Header里灶体,順便給Header改個(gè)響亮的名字UMMobClick

4.1.2

開始制作我們自己的靜態(tài)庫的項(xiàng)目阅签,將UMMobClick文件夾拖進(jìn)項(xiàng)目里面,注意勾選Coby...和Add to target選項(xiàng),完成之后如下:

4.1.3
4.1.4
4.1.5

導(dǎo)入U(xiǎn)MMobClick的依賴庫

4.1.6

寫好我們需要調(diào)用的API和實(shí)現(xiàn),這里我只做一個(gè)調(diào)用開啟UM統(tǒng)計(jì)的接口和:


4.1.7
4.1.8

生成我們需要的靜態(tài)庫文件

生成模擬器的靜調(diào)庫蝎抽,選中一個(gè)模擬器設(shè)置Build Active Architecture Only = NO,設(shè)置Edit Scheme ->Run->Build configuration ->Debug.Command + B編譯生成靜態(tài)庫

4.1.9
4.1.10
4.1.11

同理選中真機(jī)政钟,Edit Scheme ->Run->Build configuration ->Release

4.1.12

合并兩個(gè)版本的靜態(tài)庫:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市樟结,隨后出現(xiàn)的幾起案子养交,更是在濱河造成了極大的恐慌,老刑警劉巖瓢宦,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碎连,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡驮履,警方通過查閱死者的電腦和手機(jī)鱼辙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門廉嚼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人倒戏,你說我怎么就攤上這事怠噪。” “怎么了杜跷?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵傍念,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我葛闷,道長(zhǎng)憋槐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任淑趾,我火速辦了婚禮秦陋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘治笨。我一直安慰自己,他們只是感情好赤嚼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布旷赖。 她就那樣靜靜地躺著,像睡著了一般更卒。 火紅的嫁衣襯著肌膚如雪等孵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天蹂空,我揣著相機(jī)與錄音俯萌,去河邊找鬼。 笑死上枕,一個(gè)胖子當(dāng)著我的面吹牛咐熙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播辨萍,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼棋恼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了锈玉?” 一聲冷哼從身側(cè)響起爪飘,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拉背,沒想到半個(gè)月后师崎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡椅棺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年犁罩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了齐蔽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昼汗,死狀恐怖肴熏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情顷窒,我是刑警寧澤蛙吏,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站鞋吉,受9級(jí)特大地震影響鸦做,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谓着,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一泼诱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赊锚,春花似錦治筒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至牲平,卻和暖如春堤框,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纵柿。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工蜈抓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人昂儒。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓沟使,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親渊跋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子格带,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容