iOS組件化

一芜壁、新建工程LZDemo作為殼工程

1、添加Podfile文件

cd到你剛創(chuàng)建的工程目錄下,執(zhí)行以下語(yǔ)句

pod init

然后會(huì)發(fā)現(xiàn)你的工程目錄下多了Podfile文件


圖片.png

2、生成xcworkspace工程

執(zhí)行

pod install

3躬它、新建一個(gè)Lib(自己起名)文件夾,用來(lái)存放組件庫(kù)(其他獨(dú)立工程)


圖片.png

然后cd到Lib下
執(zhí)行

pod lib create TRUNetworking

其中TRUNetworking就是你自定義的一個(gè)工程名字东涡,也就是你的其中一個(gè)組件或者業(yè)務(wù)模塊

圖片.png

然后根據(jù)提示冯吓,生成pod工程模板


圖片.png

打開(kāi)新建的TRUNetworking工程里的Example,可以看到pods里面疮跑,有個(gè)ReplaceMe的文件组贺,意思就是要替換它,換成我們自己需要對(duì)外提供的類(lèi)祖娘。


圖片.png

新建一個(gè)類(lèi)失尖,比如TRUNetworking,復(fù)制粘貼到ReplaceMe同級(jí)目錄下贿条,并刪掉ReplaceMe.m文件


圖片.png

之后cd到Lib/TRUNetworking/Example/文件目錄下雹仿,執(zhí)行

pod install

這個(gè)時(shí)候在Development Pods文件下會(huì)多出這兩個(gè)文件增热,這就是本地開(kāi)發(fā)的pods文件


圖片.png

而Podfile的內(nèi)容其實(shí)是
pod 'TRUNetworking', :path => '../'
說(shuō)明他獲取的是本地路徑

然后刪除Example for TRUNetworking里面的TRUNetworking類(lèi)整以,不然運(yùn)行會(huì)因?yàn)轭?lèi)重復(fù)報(bào)錯(cuò)。
至此峻仇,一個(gè)組件的本地庫(kù)就創(chuàng)建完成了公黑。

二、殼工程使用本地組件庫(kù)

首先cd到殼工程LZDemo目錄下摄咆,修改LZDemo的Podfile文件凡蚜,增加
pod 'TRUNetworking', :path => 'Lib/TRUNetworking'


圖片.png

執(zhí)行

pod install
圖片.png

這樣殼工程就pod到本地組件庫(kù)的內(nèi)容了,原理跟使用平時(shí)的第三方遠(yuǎn)程庫(kù)一樣吭从。只不過(guò)這次使用的是本地的朝蜘。只不過(guò)本地的pod放在了Development Pods文件夾里面,這個(gè)文件夾里的內(nèi)容其實(shí)是可以修改的涩金,修改后立刻生效谱醇,會(huì)比遠(yuǎn)程pod需要提交版本號(hào),本地再pod對(duì)應(yīng)的版本號(hào)方便得多步做。

我們?cè)儆猛瑯臃椒▌?chuàng)建另一個(gè)本地工程副渴,登錄模塊TRULogining
但是這個(gè)模塊需要依賴(lài)TRUNetworking,所以我們得在兩個(gè)地方添加依賴(lài)


圖片.png

圖片.png

由于依賴(lài)的TRUNetworking在更上一層的文件中全度,所以需要../../
執(zhí)行

pod install

之后應(yīng)該能看到Development Pods里已經(jīng)有2個(gè)文件夾了


圖片.png

這個(gè)時(shí)候就可以import里面的類(lèi)煮剧,在本地使用了。

注意:如果新建的本地pod里的單工程,如果依賴(lài)了一些第三方的遠(yuǎn)程庫(kù)的話(huà)勉盅,需要在該工程的podspec文件里添加依賴(lài)佑颇,如:s.dependency 'XXX', '~> 3.3.8'。然后執(zhí)行pod install之后草娜,再CD回到主工程中重新執(zhí)行pod install漩符,否則運(yùn)行時(shí)會(huì)報(bào)找不到第三方庫(kù)的錯(cuò)誤。

三驱还、關(guān)聯(lián)git
完成了本地pod依賴(lài)嗜暴,但是我們肯定不會(huì)是個(gè)人開(kāi)發(fā),否則弄這個(gè)組件化的意義也不大议蟆,所以我們首先得提交到遠(yuǎn)程闷沥,一般公司里都會(huì)搭建私有倉(cāng)庫(kù)諸如GitLab,這里就拿GitHub來(lái)做演示咐容。

1)提交殼工程到遠(yuǎn)程
首先舆逃,在Github上Create a new repository


圖片.png

然后,cd回殼工程目錄下戳粒,依次執(zhí)行

git init

初始化git

git add .

執(zhí)行g(shù)it add .的時(shí)候路狮,會(huì)發(fā)現(xiàn)警告warning: adding embedded git repository: Lib/TRULogining之類(lèi)的,是因?yàn)門(mén)RULogining目錄下有它自己的git倉(cāng)庫(kù)蔚约,它倆是獨(dú)立存在的奄妨,有另外一個(gè)git倉(cāng)庫(kù)專(zhuān)門(mén)管理他,因?yàn)樗彩且粋€(gè)完整的獨(dú)立工程苹祟,這里我們先忽略它砸抛。

然后,提交初始化工程

git commit -m "init project"

接下來(lái)树枫,我們要讓這個(gè)工程和剛才在Github上創(chuàng)建的Repository關(guān)聯(lián)

git remote add origin https://github.com/liuzhao/LZDemo.git

然后直焙,提交初始化工程到遠(yuǎn)端的master,這里我們用了-f砂轻,表示強(qiáng)制提交奔誓,否則因?yàn)镚ithub上還有readme之類(lèi)的文件,需要解決沖突再pull搔涝,比較麻煩厨喂,基于是初始工程,直接強(qiáng)制push上去即可体谒。

git push origin master -f

刷新一下Github上的LZDemo杯聚,會(huì)看到已經(jīng)提交上去了


圖片.png

2)提交子工程到遠(yuǎn)端


圖片.png

使用跟提交主工程一樣的做法,分別在Github上Create a new repository抒痒,然后把他們關(guān)聯(lián)起來(lái)

唯一和殼工程不同的是幌绍,他們是組件,需要對(duì)外提供依賴(lài)關(guān)系。所以我們還得多做一步操作傀广,那就是增加podspec文件颁独。
以TRUNetworking為例,cd到TRUNetworking目錄下伪冰,執(zhí)行

git tag 0.1.0
git push --tags

刷新一下Github上的地址誓酒,會(huì)看到多了一個(gè)分支


圖片.png

這個(gè)tag分支就是將來(lái)提供給別人依賴(lài)的版本號(hào)分支,有了它贮聂,別人使用你的組件的時(shí)候就可以根據(jù)版本號(hào)來(lái)控制了靠柑。

接下來(lái),使用trunk方式將代碼發(fā)布到CocoaPods上
首先先編輯一下podspec文件


圖片.png

改好后吓懈,在上傳之前歼冰,最好先本地檢查一下podspec是否合法

執(zhí)行下面語(yǔ)句

pod lib lint --verbose
圖片.png

如果出現(xiàn)passed validation,說(shuō)明通過(guò)耻警,可以提交到cocoapods上了
執(zhí)行

pod trunk push TRUNetworking.podspec --verbose

成功后隔嫡,就可以pod search到我們提交的庫(kù)了
ps:如果搜不到,不是沒(méi)傳成功甘穿,是我們的本地搜索庫(kù)沒(méi)更新腮恩,可以先刪除~/Library/Caches/CocoaPods目錄下的search_index.json文件或者pod repo update一下
終端執(zhí)行

rm ~/Library/Caches/CocoaPods/search_index.json

再執(zhí)行

pod search
圖片.png

這樣,本地庫(kù)就會(huì)變成遠(yuǎn)程庫(kù)温兼,我殼工程的podfile文件就可以改成
pod 'TRUNetworking'秸滴,而不再需要后面的path了


圖片.png

重新對(duì)殼工程LZDemo進(jìn)行pod install之后,會(huì)發(fā)現(xiàn)妨托,原來(lái)的TRUNetworking文件已經(jīng)從Development Pods里跑到Pods里去了


圖片.png

一些注意點(diǎn):

1)如果pod trunk push上去的podspec文件缸榛,如果有依賴(lài)庫(kù)吝羞,這個(gè)依賴(lài)庫(kù)必須是在cocoapods上兰伤,即使是不能依賴(lài)本地庫(kù),而是遠(yuǎn)程庫(kù)钧排。所以說(shuō)敦腔,比如剛才創(chuàng)建的TRUNetworking和TRULogining,如果要發(fā)布TRULogining到cocoapods恨溜,但是由于TRULogining是依賴(lài)于TRUNetworking的符衔,所以要首先將TRUNetworking提上到cocoapods上,否則TRULogining是提不上去的糟袁。

2)由于殼工程和子工程都有獨(dú)立存在的git判族,所以別人從殼工程的git地址clone下來(lái)的工程,是沒(méi)有子工程的存在的项戴。如果想運(yùn)行起來(lái)殼工程形帮,要么是所有的子工程都已經(jīng)提到cocoapods上,要么是拿到子工程的git地址,checkout到本地殼工程的Lib庫(kù)下辩撑。

3)如果你不想每簡(jiǎn)歷一個(gè)子工程界斜,都要到Github或者GitLab上創(chuàng)建一個(gè)repository的話(huà),又想把子工程push到殼工程的git上的話(huà)合冀,可以先把子工程里的git刪除各薇,這樣push上的殼工程代碼,就會(huì)帶上子工程了君躺,等你需要單獨(dú)管理子工程的時(shí)候峭判,再把git加回去即可。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末棕叫,一起剝皮案震驚了整個(gè)濱河市朝抖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谍珊,老刑警劉巖治宣,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異砌滞,居然都是意外死亡侮邀,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)贝润,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)绊茧,“玉大人,你說(shuō)我怎么就攤上這事打掘』罚” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵尊蚁,是天一觀的道長(zhǎng)亡笑。 經(jīng)常有香客問(wèn)我,道長(zhǎng)横朋,這世上最難降的妖魔是什么仑乌? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮琴锭,結(jié)果婚禮上晰甚,老公的妹妹穿的比我還像新娘。我一直安慰自己决帖,他們只是感情好厕九,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著地回,像睡著了一般扁远。 火紅的嫁衣襯著肌膚如雪腺阳。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天穿香,我揣著相機(jī)與錄音亭引,去河邊找鬼。 笑死皮获,一個(gè)胖子當(dāng)著我的面吹牛焙蚓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播洒宝,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼购公,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了雁歌?” 一聲冷哼從身側(cè)響起宏浩,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎靠瞎,沒(méi)想到半個(gè)月后比庄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乏盐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年佳窑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片父能。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡神凑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出何吝,到底是詐尸還是另有隱情溉委,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布爱榕,位于F島的核電站瓣喊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏呆细。R本人自食惡果不足惜型宝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望絮爷。 院中可真熱鬧,春花似錦梨树、人聲如沸坑夯。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)柜蜈。三九已至仗谆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間淑履,已是汗流浹背隶垮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秘噪,地道東北人狸吞。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像指煎,于是被迫代替她去往敵國(guó)和親蹋偏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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