前言
-
背景
記得上一次自己做過一個(gè)SDK,目的是讓其他APP能自動(dòng)跳轉(zhuǎn)到公司APP中做些事,一番資料查閱,任務(wù)也很快完成。當(dāng)時(shí)自己也感覺做SDK也就那么回事,爛熟于心。過了一年多,公司業(yè)務(wù)發(fā)展,投訴平臺(tái)上線后,新需求又來了。需要前端把整個(gè)網(wǎng)絡(luò)服務(wù)層(socket.io)做成SDK,可以提供給其他公司調(diào)用,也有方便公司新項(xiàng)目能快速集成的考慮。當(dāng)然,這些都是些題外話,問題的關(guān)鍵是我又忘記了,雖然說步驟并不復(fù)雜。經(jīng)過資料查閱加上自己的驗(yàn)證,于是乎,就有了這篇文章。
-
學(xué)有所出:
個(gè)人覺得,學(xué)習(xí),不管是哪一門學(xué)科,那個(gè)行業(yè),最好的學(xué)習(xí)方法就是學(xué)有所出。帶著目的去學(xué)習(xí),要求自己學(xué)了某個(gè)東西一定最后能有個(gè)產(chǎn)出??梢允且黄獙W(xué)習(xí)心得,發(fā)表一篇科技論文;也可以是將自己所學(xué)的新東西與以往的東西融匯貫通,比方說,學(xué)習(xí)了某個(gè)新技術(shù),然后集成到自己的工程中;當(dāng)然,產(chǎn)出也可以是具體的某個(gè)實(shí)物,一個(gè)APP或是一個(gè)創(chuàng)新發(fā)明。學(xué)有說出,帶著這個(gè)信念和目的,不僅我們的學(xué)習(xí)過程不會(huì)那么枯燥乏味,而且能夠體會(huì)到最后產(chǎn)出給我?guī)淼南矏偂?/li> -
學(xué)有所記
俗話說,好記性不如爛筆頭,說的就是做筆記的重要性!看懂別人的,那還是別人的,學(xué)了新東西,當(dāng)時(shí)會(huì)了,也做到了有所出。但是,如果這些新東西,我們不是像寫NSLog一樣經(jīng)常用,難免會(huì)忘記。特別是很多有關(guān)工程配置的東西,繁瑣難記。按照自己的思路整理一篇博客,方便他人的同時(shí)也利于自己下次使用。
正題
這篇文章的目的是:如何快速制作自己的SDK。所以很多關(guān)于SDK的介紹內(nèi)容就不再累述,這里只寫一些自己覺得重要的東西和詳細(xì)步驟。
A、關(guān)于靜態(tài)庫和動(dòng)態(tài)庫
- 靜態(tài)庫:.a和.framework ,動(dòng)態(tài)庫:.dylib和.framework。.framework可靜可動(dòng),取決于你的配置,詳見后面過程。
- 我們做SDK的目的其實(shí)主要那么幾個(gè),解耦,給別人用又不想別人看見我們的源碼。
- 我們做SDK都是做靜態(tài)庫也就上面的.a和.framework
B、如何制作.a靜態(tài)庫
-
1.新建工程,選擇Static Library
6FAB3AF7-A850-4704-B5D8-EECE9C2CA11B.png -
2.Build Active Architecture Only 設(shè)置為NO(不同機(jī)型的架構(gòu)不一樣,設(shè)置為NO適配不同機(jī)型)
392B203B-6EDB-4EB8-8380-B49013CE95AE.png -
3.添加需要打包的代碼
35697350-1563-461C-A878-9D5D466D7D90.png -
4 設(shè)置最低支持版本和暴露頭文件(別人能看到的.h文件)
5629B684-21F3-473C-9EA8-6577FD427A9C.png
4A450010-61B5-44DA-976F-38B8F3C646DE.png
-
5.運(yùn)行代碼生成對(duì)應(yīng)庫(模擬器和真機(jī)下分別在debug和release環(huán)境下運(yùn)行代碼,總共是4次,右鍵點(diǎn)擊上圖中的紅框內(nèi)庫文件,Show in Finder會(huì)發(fā)現(xiàn)4個(gè)人文件,對(duì)應(yīng)剛才4次運(yùn)行結(jié)果)
84BDFB39-3286-4CDC-9D47-9E4A853A4531.png - 6.合并庫文件(注意空格)
- 生成debug庫文件
終端:lipo -creat debug下模擬器庫文件路徑 debug模式下真機(jī)庫文件路徑 -output 合并后庫文件路徑 - 生成release庫文件
終端:lipo -creat release下模擬器庫文件路徑 release模式下真機(jī)庫文件路徑 -output 合并后庫文件路徑
說明:最終生成了兩個(gè)合并好的庫文件,debug和release。使用時(shí)根據(jù)當(dāng)前工程配置情況選用對(duì)應(yīng)庫文件。
- 生成debug庫文件
-
7 驗(yàn)證。將做好的庫文件添加到自己的工程中,看是否能正常使用。注意,.a靜態(tài)庫文件沒有頭文件,需要自己手動(dòng)添加,找到剛才生成的四個(gè)文件,任選一個(gè),拷貝include文件夾,同合并好的庫文件一起添加到工程中才能正常使用。
FB2EC2CC-B93C-4C5D-B279-7F21B331A41D.png
A7AF486B-8046-49EA-9467-66C727CBE4B5.png
c、如何制作.framework靜態(tài)庫
-
1.新建framework工程
56BA7CB5-AB1F-41C2-A2DE-BD368EA1DF9C.png
84F7955D-A517-44A3-9C9C-826EE97F6E16.png -
2.Build Active Architecture Only 設(shè)置為NO(不同機(jī)型的架構(gòu)不一樣,設(shè)置為NO適配不同機(jī)型)
79333EB0-3DF1-4B21-B8DF-02A204C3251F.png - 3.暴露頭文件
注意:framework工程新建就有一個(gè).h文件,其實(shí)就是一個(gè)主頭文件。我們?cè)谥黝^文件中導(dǎo)入需要導(dǎo)入的頭文件,后面我們?cè)谑褂眠@個(gè)靜態(tài)庫的時(shí)候只需要導(dǎo)入這個(gè)主頭文件即可。就像我們使用很多第三方開源框架一樣。

-
4.設(shè)置為靜態(tài)庫(默認(rèn)是動(dòng)態(tài)庫)
23F796BC-63EC-4CBC-9602-423211C5017D.png -
5.合并庫文件,做法和.a靜態(tài)庫一樣。
注意:- 合并的是下圖所示文件
- output文件后綴為.lipo
- 生成的.lipo文件去掉后綴名,改為與合并前文件一樣的名稱,拖入開始運(yùn)行生成的人一個(gè)文件中,替換原來的。

-
6.驗(yàn)證(上述替換好的.framework文件添加的工程中)
E53B0F7A-3067-4DAE-A637-8B064E3E5988.png












