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

原本不打算在分開在累述發(fā)一遍這個(gè)的,這個(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ú)拎出一篇記錄一下。

制作工具xcode版本 8.2.1

一. 一般制作靜態(tài)庫的方法及靜態(tài)庫和動(dòng)態(tài)庫的詳細(xì)介紹,偷個(gè)懶借鑒一下別人的iOS靜態(tài)庫SDK制作,我自己也是因?yàn)殪o態(tài)庫的問題看過很多人的博客,我覺得這篇不管從原理還是制作方法說的都是很詳細(xì)的。32個(gè)贊!

二. 在<1>的基礎(chǔ)上我們可能有額外的兩個(gè)需求:1就是將第三方的靜態(tài)庫(.a)打包進(jìn)我們自己的靜態(tài)庫中,2.將第三方靜態(tài)庫(.framework)打包進(jìn)我們自己的靜態(tài)庫中。首先來說一下1的實(shí)現(xiàn)方式,我們以百度統(tǒng)計(jì)的SDK為例子,將百度統(tǒng)計(jì)的功能集成到我們自己的靜態(tài)庫中去:

2.1 創(chuàng)建一個(gè)靜態(tài)庫項(xiàng)目,選擇Static Library (生成.a的靜態(tài)庫,如果選擇Framework即生成.framework的靜態(tài)庫也可以是動(dòng)態(tài)庫 具體怎么區(qū)分請(qǐng)參見<1.>)

2.1-1.png

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

2.2-1.png

2.2-2.png

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

2.3-1

2.3-2

2.3-3

2.4 設(shè)置Build setting如下

2.4-1

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

2.5-1

2.5-2

2.5-3

2.5-4

2.5-5

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

2.5-1

2.5-2

三.另外一種情況比較特殊的情況就是將第三方的.framework的庫包含進(jìn)我們的靜態(tài)庫中,首先了解一下.framework和.a的靜態(tài)庫之間的區(qū)別借用:

二. Framework、.a、.dylib/.tbd

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)庫中。沒有辦法直接整體打包那么有沒有辦法間接的引入呢?

四.因?yàn)槲覀児居幸粋€(gè)外包的Flash Air跨平臺(tái)的游戲項(xiàng)目<安卓,iOS,Windows>,公司想集成一個(gè)App統(tǒng)計(jì)的功能,統(tǒng)計(jì)一下用戶數(shù)量活躍度之類的。這時(shí)候需要用到一個(gè)ANE擴(kuò)展庫的功能,具體干嘛的有興趣的可以去百度上Google一下,如果也有這方面的需求可以參考我的另一篇:Flash Air ANE for iOS 集成最新版本的友盟統(tǒng)計(jì)SDK.framework功能,簡單來說就是通過在Air端提供的橋接接口,在Air端通過調(diào)用橋接的接口間接調(diào)用iOS端庫中的方法,實(shí)現(xiàn)方式類似與OC的代理方法一樣。

我們?cè)谡{(diào)研的時(shí)候遇到的問題

a).現(xiàn)在主流的第三方都不在提供ANE的擴(kuò)展庫,這意味著你想用的話必須自己去生成。

b).現(xiàn)在網(wǎng)上有關(guān)ANE的資料大多都比較老大多停留在14年左右,GitHub上的庫基本都是13 14年的,也能依稀看的到Flash Air開發(fā)逐漸的沒落。

c).開發(fā)上遇到的難題:因?yàn)橹谱鱝ne需要兩個(gè)最重要的文件一個(gè)是.a的靜態(tài)庫一個(gè)是Flash制作的接口swc文件,.a的庫是需要封裝好第三方的功能,因?yàn)槲覀児窘y(tǒng)一使用的是友盟的,而友盟新版本的SDK已經(jīng)變成.framework的形式,而且我問了他們客服,已經(jīng)不提供.a的靜態(tài)庫了。經(jīng)過幾天的折騰發(fā)現(xiàn)確實(shí)只能將.a的靜態(tài)庫包含進(jìn)ANE的擴(kuò)展庫中,而使用.framework是無法包含進(jìn)去的<至少是我自己調(diào)研出來的結(jié)果,有些方法確實(shí)可以將framework打包進(jìn)ane中,但是API接口無法調(diào)用>。所以就遇到了頭疼的問題,怎么把別人的framework打包進(jìn)我的.a靜態(tài)庫中?然后我才能去合成我的ane擴(kuò)展庫。

通過framework的介紹:Framework的英文釋意是框架,主要由Headers、binary文件、.bundle這三部分構(gòu)成,其實(shí)framework就是在.a靜態(tài)庫基礎(chǔ)上的更上一層封裝,包含了資源,二進(jìn)制文件,和頭文件并生成統(tǒng)一格式方便用戶調(diào)用有點(diǎn)類似<.dylib和.tbd>,并不是重新生成的另外一種形式,只是對(duì)老的格式進(jìn)行了一層更規(guī)范的封裝,統(tǒng)一管理資源文件 頭文件和庫的二進(jìn)制文件。所以如果你需要的.a文件其實(shí)就在.framework文件中,以友盟為例:手動(dòng)把二進(jìn)制文件改成.a的后綴,帶上頭文件,然后調(diào)用他吧...

4.2-1

所以想要把framework打包進(jìn)你的靜態(tài)庫中去的話,你只需要兩步->四.2->

五.如若轉(zhuǎn)載請(qǐng)注明出處,如果有不正確的地方歡迎留言指出,完。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,637評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,629評(píng)論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,976評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評(píng)論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,139評(píng)論 0 290
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,686評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,411評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,641評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評(píng)論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,820評(píng)論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評(píng)論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,362評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,604評(píng)論 2 380

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