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

原本不打算發一篇這個的,應該是包含在這篇Flash Air ANE for iOS 集成最新版本的友盟統計SDK.framework功能中的,但是由于ANE的開發需求一般太少,這個靜態庫如何包含第三方SDK靜態庫又是我在開發ANE擴展庫中遇到的一個大問題,折騰了好幾天才解決了這個問題。而且網上問的人很多,且大多都沒有給出解決方案,所以還是單獨拎出一篇記錄一下。
制作工具xcode版本 8.2.1

一. 簡單介紹

一般制作靜態庫的方法及靜態庫和動態庫的詳細介紹,偷個懶借鑒一下別人的iOS靜態庫SDK制作,我覺得這篇不管從原理還是制作方法說的都是很詳細的。32個贊!


二. 使用.a文件制作靜態庫

在<一>的基礎上我們可能有額外的兩個需求:1就是將第三方的靜態庫(*.a)打包進我們自己的靜態庫中,2.將第三方靜態庫(.framework)打包進我們自己的靜態庫中。首先來說一下1的實現方式,我們以百度統計的SDK為例子,將百度統計的功能集成到我們自己的靜態庫中去:

2.1 創建一個靜態庫項目,選擇Static Library (生成.a的靜態庫,如果選擇Framework即生成.framework的靜態庫也可以是動態庫 具體怎么區分請參見<1.>)


2.1-1.png

2.2將靜態庫拖入到項目中,并勾選Add to Targets到庫中。


2.2-1.png

2.2-2.png

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


2.3-1

2.3-2

2.3-3

2.4 設置Build setting如下
2.4-1

2.5 分別設置編譯庫運行環境Debug/Release,并分別選擇編譯Target Device為模擬器/Generic iOS device,運行生成兩個版本的靜態庫.a文件:


2.5-1

2.5-2

2.5-3

2.5-4

2.5-5

2.6 通過lipo -create //debug.a //release.a -output universal.a命令將兩個靜態庫合成一個靜態庫適用于不同的編譯環境:這就制作完成了可以用了。

2.5-1

2.5-2


三.Framework、.a、.dylib/.tbd三種格式的說明

另外一種情況比較特殊的情況就是將第三方的.framework的庫包含進我們的靜態庫中,首先了解一下.framework和.a的靜態庫之間的區別:

  1. Framework
    Framework的英文釋意是框架,主要由Headers、binary文件、.bundle這三部分構成,除此之外還有Info.plist和Modules,后兩者主要記錄Framework的版本之類的信息,一般都會刪掉,不做討論

a).Headers
包含我們在制作Framework的時候暴露的頭文件,所有被暴露的.h都放在這里。
b).binary文件
整個Framework的核心,所有代碼都被編譯成了這樣一坨二進制文件,這里要注意的是添加的依賴庫不會被編譯進來,用的時候還需要重新link其他依賴庫。
c).bundle
資源文件都打包放在這里。在制作Framework的時候不可以把圖片直接放在項目中,否則制作好之后圖片是一張一張的出現在項目中非常亂,需要新建一個bundle將圖片放進去,這里的bundle提供整個SDK的圖片資源。
注意:圖片放進bundle之后不可以用[UIImage ImageWithName:]讀取圖片。要先找到bundle包再拿圖片。
其實Framework既可以是靜態庫也可以是動態庫,這取決于編譯成的Mach-O(就是那個二進制文件)是動態庫還是靜態庫,Framework本質上并不是一個庫,它是蘋果為了方便開發者提供了一種庫的打包方式,Framework會將Mach-O文件、頭文件和資源包全都包含進來,不需要你再手動整理,我們也可以通過Xcode來制作framework動態庫使用。
所以總結:Framework是庫的打包形式,既可以是動態庫也是靜態庫。

  1. .a靜態庫
    這類靜態庫與Framework基本類似,不同的是在打包成.a文件的同時,還需要提供頭文件,使用時相較于Framework比較麻煩,(例如微信支付SDK使用的是.a,不同的是支付寶SDK是以framework的形式打包的)。.a這樣打包不夠方便,而Framework編譯完成暴露的頭文件都已經放好了。
  1. .dylib/.tbd 動態庫
    這類動態庫我們也經常用,基本上都是系統提供的,一般不能自己制作,就算你通過其他方式制作使用,也肯定不能上架的,這里沒什么好講的。
  1. ** 如果將第三方SDK的framework包含在自己的靜態庫中,一種方法就是打包的時候不打包進自己的靜態庫中,然后在調用靜態庫的時候再在程序中引入第三方的SDK即可**,iOS靜態庫SDK制作也有提到具體如何操作,.framewrok的庫確實無法整體直接打包進靜態庫中。沒有辦法直接整體打包,那么有沒有辦法間接的引入呢?

四.艱辛路程

因為我們公司有一個外包的Flash Air跨平臺的游戲項目<安卓,iOS,Windows>,公司想集成一個App統計的功能,統計一下用戶數量活躍度之類的。這時候需要用到一個ANE擴展庫的功能,具體干嘛的有興趣的可以去百度上Google一下,如果也有這方面的需求可以參考我的另一篇:Flash Air ANE for iOS 集成最新版本的友盟統計SDK.framework功能,簡單來說就是通過在Air端提供的橋接接口,在Air端通過調用橋接的接口間接調用iOS端庫中的方法,實現方式類似與OC的代理方法一樣。

  1. 我們在調研的時候遇到的問題

a).現在主流的第三方都不在提供ANE的擴展庫,這意味著你想用的話必須自己去生成<ShareSDK 還有提供>。
b).現在網上有關ANE的資料大多都比較老大多停留在14年左右,GitHub上的庫基本都是13 14年的,也能依稀看的到Flash Air開發逐漸的沒落。
c).開發上遇到的難題:因為制作ane需要兩個最重要的文件一個是.a的靜態庫一個是Flash制作的接口swc文件,.a的庫是需要封裝好第三方的功能,因為我們公司統一使用的是友盟的,而友盟新版本的SDK已經變成.framework的形式,而且我問了他們客服,已經不提供.a的靜態庫了。經過幾天的折騰發現確實只能將.a的靜態庫包含進ANE的擴展庫中,而使用.framework是無法包含進去的<至少是我自己調研出來的結果,有些方法確實可以將framework打包進ane中,但是API接口無法調用>。所以就遇到了頭疼的問題,怎么把別人的framework打包進我的.a靜態庫中?然后我才能去合成我的ane擴展庫。

  1. 通過framework的介紹:Framework的英文釋意是框架,主要由Headers、binary文件、.bundle這三部分構成,其實framework就是在.a靜態庫基礎上的更上一層封裝,包含了資源,二進制文件,和頭文件并生成統一格式方便用戶調用有點類似<.dylib和.tbd>,并不是重新生成的另外一種形式,只是對老的格式進行了一層更規范的封裝,統一管理資源文件 頭文件和庫的二進制文件。所以如果你需要的.a文件其實就在.framework文件中,以友盟為例:手動把二進制文件改成.a的后綴,帶上頭文件,然后調用他吧...
    4.2-1
  1. 所以想要把framework打包進你的靜態庫中去的話,你只需要兩步->四.2->


. 正文



五. 將第三方.framework集成到自己的靜態庫里

好像直接指定步驟很多人做出來的靜態庫不能用>_<...,所以我還是來把將第三方.framework集成到自己的靜態庫里寫一個完整的流程吧。大家對照做看看有哪些步驟做錯了。

1 .這里我已友盟的SDK作為例子,首先去友盟官網下載最新版本的SDK 友盟官網,解壓根據如下路徑找到二進制文件

1.png

2 . 將UMMobClick的二進制文件改成.a的后綴名,并且拖到Header里,順便給Header改個響亮的名字UMMobClick

2.png

3 .開始制作我們自己的靜態庫的項目,將UMMobClick文件夾拖進項目里面,注意勾選Coby...和Add to target選項,完成之后如下:

3

4.png

5

4 . 導入UMMobClick的依賴庫

6

5 . 寫好我們需要調用的API和實現,這里我只做一個調用開啟UM統計的接口和:

7

8

6 .生成我們需要的靜態庫文件

1.生成模擬器的靜調庫,選中一個模擬器設置Build Active Architecture Only = NO,設置Edit Scheme ->Run->Build configuration ->Debug.Command + B編譯生成靜態庫


9

10

11

2,同理選中真機,Edit Scheme ->Run->Build configuration ->Release


12.png

7 .合并兩個版本的靜態庫:

1.右鍵靜態庫->Show in Finder


13

2.將兩個庫拖到桌面


14

3.運行命令lipo -create /Users/collegepre/Desktop/Products/Debug-iphonesimulator/libUMMobStaticLib.a /Users/collegepre/Desktop/Products/Release-iphoneos/libUMMobStaticLib.a -output libUMMobStaticLib.a
15png

4.將生成的靜態庫和頭文件拖入一個文件夾


16

8 .驗貨...

1.創建一個測試程序拖入上面創建好的靜態庫.


17

2.導入依賴庫


18.png

3.調用接口
19

4.運行查看結果


20.png

5.結果OK,

六.Demo地址

demo地址Demo傳送門

七.如若轉載請注明出處,

如果有不正確的地方歡迎留言指出。

對你有幫助的話,請點個贊吧!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,030評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,310評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,951評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,796評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,566評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,055評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,142評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,303評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,799評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,683評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,899評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,409評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,135評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,520評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,757評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,528評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,844評論 2 372

推薦閱讀更多精彩內容