手把手教你創(chuàng)建靜態(tài)庫

靜態(tài)庫是是什么,有什么用途就不說多了,在這篇文章里有具體介紹:http://www.lxweimin.com/p/31ea30b1826d,我就直接上干貨拉。

第一步:用XCode創(chuàng)建一個(gè)靜態(tài)庫項(xiàng)目


選擇紅框中的選項(xiàng)創(chuàng)建靜態(tài)庫項(xiàng)目


想一個(gè)獨(dú)一無二的庫名

?第二步:實(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)就期待各位去慢慢研究。


.h中的聲明


.m中的實(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):


修改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)庫。


編譯完成后生成.a文件

編譯好的靜態(tài)庫會(huì)方法一個(gè)指定的目錄下面,假如四種版本都編譯了,就會(huì)生成如圖的四個(gè)文件夾,具體的對(duì)應(yīng)關(guān)系就不再一一介紹了:


每個(gè)目錄中都有一個(gè).a文件


3.通常我們會(huì)希望我們提供給別人的版本既能支持模擬器,又能支持真機(jī),那么,我們就需要合并靜態(tài)庫,對(duì)應(yīng)上圖的話即使合并兩個(gè)Debug目錄中的.a文件和兩個(gè)Release目錄中的.a文件。以Release版本舉例說明:


合并前兩個(gè).a文件支持的架構(gòu)


合并后新的.a文件支持的架構(gòu)

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)的頭文件。


靜態(tài)庫的使用

這種既要導(dǎo)入.h文件,又要導(dǎo)入.a文件的方式對(duì)于強(qiáng)迫癥患者來說是很難接受的,那么有沒有更好的方法統(tǒng)一管理呢?答案是YES,.framework可以滿足這一需求!

最后編輯于
?著作權(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ù)。

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,991評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,552評(píng)論 25 708
  • 靜態(tài)庫與動(dòng)態(tài)庫的區(qū)別 首先來看什么是庫,庫(Library)說白了就是一段編譯好的二進(jìn)制代碼,加上頭文件就可以供別...
    吃瓜群眾呀閱讀 12,089評(píng)論 3 42
  • 率性灑脫,敢愛敢恨;毒舌如簧,卻不失真心;本性學(xué)渣,對(duì)生意卻苦心經(jīng)營,毫不懈怠;看似放蕩不羈,閱人無數(shù),卻只對(duì)趙醫(yī)...
    小團(tuán)圓子閱讀 376評(píng)論 0 3