靜態(tài)庫是是什么,有什么用途就不說多了,在這篇文章里有具體介紹:http://www.lxweimin.com/p/31ea30b1826d,我就直接上干貨拉。
第一步:用XCode創(chuàng)建一個(gè)靜態(tài)庫項(xiàng)目
?第二步:實(shí)現(xiàn)靜態(tài)庫代碼
靜態(tài)庫項(xiàng)目創(chuàng)建完成后在組織結(jié)構(gòu)中會(huì)出現(xiàn)兩個(gè)跟項(xiàng)目名稱同名的.h和.m文件,實(shí)現(xiàn)的邏輯跟普通的iOS代碼一樣,.h中聲明屬性和方法,.m中實(shí)現(xiàn)方法。筆者在這里簡單的在.h文件中聲明了一個(gè)屬性,一個(gè)類方法和一個(gè)實(shí)例方法,并在.m文件中實(shí)現(xiàn)了這兩個(gè)方法。鑒于這是一篇入門的文章,更復(fù)雜的實(shí)現(xiàn)就期待各位去慢慢研究。
第三步:編譯靜態(tài)庫
代碼到這里已經(jīng)碼完了,是不是很簡單,接著就是編譯(Command+B)。編譯時(shí)要注意以下幾點(diǎn):
1.注意模擬器和真機(jī)的區(qū)別。編譯版本一共可分為四種:模擬器環(huán)境下的(Debug和Release)版本,真機(jī)環(huán)境下的(Debug和Release)版本。模擬器和真機(jī)的區(qū)別是因?yàn)镃PU架構(gòu)不同,模擬器(4s~5: i386,5s~7plus: x86_64),真機(jī)(3gs~4s: armv7,5~5c: armv7s,5s~7plus: arm64)。總的來說模擬器支持i386和x86_64這兩個(gè)版本,真機(jī)支持armv7,armv7s和arm64這三個(gè)版本,只要支持靜態(tài)庫支持arm7,就可以支持armv7s。
在XCode中選擇一個(gè)模擬器直接編譯,會(huì)生成一個(gè)只支持當(dāng)前模擬器架構(gòu)的Debug版本的靜態(tài)庫。就是說假如選擇了iphone7模擬器進(jìn)行編譯,編譯出來的靜態(tài)庫只會(huì)支持x86_64架構(gòu)的模擬器系統(tǒng)。如果我們希望我們編譯的Debug版本可以支持全部模擬器,則需要在Build Settings中修改配置項(xiàng):
選擇真機(jī)編譯的話不需要擔(dān)心這個(gè)問題,同樣Release版本也不需要考慮這個(gè)配置項(xiàng),因?yàn)槟J(rèn)就是No。
2. 編譯完成后下圖方框中文件的顏色會(huì)從紅色變?yōu)楹谏蜷_這個(gè)這個(gè)文件就可以看到編譯好的.a文件,也就是我們需要的靜態(tài)庫。
編譯好的靜態(tài)庫會(huì)方法一個(gè)指定的目錄下面,假如四種版本都編譯了,就會(huì)生成如圖的四個(gè)文件夾,具體的對(duì)應(yīng)關(guān)系就不再一一介紹了:
3.通常我們會(huì)希望我們提供給別人的版本既能支持模擬器,又能支持真機(jī),那么,我們就需要合并靜態(tài)庫,對(duì)應(yīng)上圖的話即使合并兩個(gè)Debug目錄中的.a文件和兩個(gè)Release目錄中的.a文件。以Release版本舉例說明:
lipo是一個(gè)linux指令,查看靜態(tài)庫信息需要加上-info選項(xiàng),合并靜態(tài)庫需要加上-create和-output選項(xiàng),這些選項(xiàng)都需要指定參數(shù)。
第四步:使用靜態(tài)庫
合并后的靜態(tài)庫已經(jīng)可以導(dǎo)入其他項(xiàng)目中使用啦,通常開發(fā)者會(huì)選擇Release版本的靜態(tài)庫。最后要注意點(diǎn)的也是很關(guān)鍵的一個(gè)。在其他項(xiàng)目中導(dǎo)入我們的靜態(tài)庫,除了導(dǎo)入.a文件以外,還需要導(dǎo)入相關(guān)的頭文件。
這種既要導(dǎo)入.h文件,又要導(dǎo)入.a文件的方式對(duì)于強(qiáng)迫癥患者來說是很難接受的,那么有沒有更好的方法統(tǒng)一管理呢?答案是YES,.framework可以滿足這一需求!