最近突然相對(duì)自己封裝的一些UI工具類進(jìn)行進(jìn)一步的封裝,突然想到了之前做過的靜態(tài)庫(kù)封裝,今天重新試了下,操作上不是很熟悉,以此為契機(jī),將技術(shù)中的點(diǎn)點(diǎn)滴滴記于簡(jiǎn)書。
一、 創(chuàng)建一個(gè)靜態(tài)庫(kù)工程。
1. 打開Xcode,點(diǎn)擊File\New\Project,選擇iOS\Framework and Library\Cocoa Touch Static Library新建一個(gè)靜態(tài)庫(kù)工程.
將工程命名為APTestSDK。
二、工程配置
Build ActiveArchitecture Only設(shè)置成YES;
Architectures按Xcode默認(rèn)配置,arm64向前兼容;
制作.a靜態(tài)庫(kù),需要要保證兼容性,包括不同iOS設(shè)備以及模擬器運(yùn)行不出錯(cuò),所以盡量做到最大的兼容性。
ValidArchitectures設(shè)置為:armv7|armv7s|arm64|i386|x86_64
三、一個(gè)靜態(tài)庫(kù)工程由頭文件和實(shí)現(xiàn)文件組成,編輯之后就組成了庫(kù)本身。
創(chuàng)建靜態(tài)庫(kù)庫(kù)時(shí),一般是不需要.m實(shí)現(xiàn)文件的,選中APTestSDK.m右擊選中delete,將其刪除。
四、將自己封裝好的自定義控件拖入工程。
1. 將功能相關(guān)的所有頭文件,導(dǎo)入到SDK的頭文件中。
2. 選中Generic iOS Device,Comand+B編譯工程。(選中Generic iOS Device編譯的是真機(jī),選中模擬器編譯的就是對(duì)應(yīng)的模擬器靜態(tài)庫(kù)。) 若編譯成功紅色的libAPTestSDK就會(huì)變成灰色。
3. 選中l(wèi)ibAPTestSDK.a右擊Show in Finder。
在下圖中你可以看到真機(jī)和模擬器對(duì)應(yīng)的靜態(tài)庫(kù)和相關(guān)文件。
然后我拿到Debug_iphonessimulator里的.a文件,還有和他相關(guān)的所有.h文件存放在一個(gè)文件夾中。此處我在桌面創(chuàng)建了一個(gè)名為MySDK的文件夾。
4. 現(xiàn)在我們那這個(gè)文件夾去玩玩了,
你運(yùn)行之后發(fā)現(xiàn)在模擬器上是沒啥問題的,當(dāng)你在真機(jī)上運(yùn)行時(shí)就會(huì)報(bào)錯(cuò)。
哈哈 ?很明顯該庫(kù)不支持arm64位架構(gòu),也就是不支持真機(jī)。回想一下就知道我們創(chuàng)建靜態(tài)庫(kù)文件時(shí),只添加了模擬器中的靜態(tài)庫(kù),所以接下來就是合并模擬器和真機(jī)的靜態(tài)庫(kù)。
五、合并靜態(tài)庫(kù)。
打開終端,輸入一下指令即可。
lipo -create ?模擬器中.a的路徑 真機(jī)中.a的路徑 -output ?/Users/mac/Desktop/libXXX.a
-output后面有一個(gè)空格, 其后跟的路徑就是你想要存放合并靜態(tài)庫(kù)的路徑。
六、 ? 把所有的需要封裝的.h和最后生成的.a放在一個(gè)文件夾里,然后引入到需要的工程即可。