組件化方案之創(chuàng)建Pod私有庫

最近公司的項(xiàng)目因?yàn)楣δ茌^多,復(fù)雜度較高,所以打算使用組件化方案去解耦業(yè)務(wù),當(dāng)然組件化方案的考慮有很多,不過這里我們只談用CocoaPods去管理組件這一塊.

在決定使用CocoaPods去管理組件之前,我的思路歷程是這樣的↓

  1. 我們?yōu)槭裁词褂肅ocoaPods去管理組件呢?
  2. 我們?yōu)槭裁匆獎?chuàng)建Pod私有庫呢?
  3. 我們在用 cocoaPods 去管理組件,還會遇到一個(gè)問題,那就是需不需要把我們的組件封裝成framework?

1. 我們?yōu)槭裁词褂肅ocoaPods去管理組件呢?

CocoaPods組件化開發(fā)好處:

  • 在CocoaPods中可以通過podfile很好的配置各個(gè)組件匆笤,包括組件的增加和刪除研侣,以及控制某個(gè)組件的版本.使用CocoaPods的原因,很大程度是為了解決大型項(xiàng)目中炮捧,代碼管理工具merge代碼導(dǎo)致的沖突.并且可以通過配置podfile文件庶诡,輕松配置項(xiàng)目.
  • 每個(gè)組件都是一個(gè)獨(dú)立app,可以獨(dú)立開發(fā)咆课、測試末誓,使得業(yè)務(wù)組件更加獨(dú)立扯俱,所有組件可以并行開發(fā).下層為上層提供能滿足需求的底層庫,保證上層業(yè)務(wù)層可以正常開發(fā).

2. 我們?yōu)槭裁匆獎?chuàng)建Pod私有庫呢?

眾所周知, CocoaPods 有兩種庫,公開庫私有庫,公開庫是所有人都可以通過 pod 把你的代碼集成到自己的項(xiàng)目,而私有庫只是可以內(nèi)部人員自己使用,而我們并沒有打算把自己的組件給別人用,所以我們要用Pod私有庫

3. 我們在用 cocoaPods 去管理組件,還會遇到一個(gè)問題,那就是需不需要把我們的組件封裝成framework?

封裝成framework有如下好處:

  • 保證在開發(fā)過程中,其他的開發(fā)人員肯能會修改我的組件代碼.

在多人開發(fā)的情況下,我不能保證其他開發(fā)人員不去修改我的組件代碼,如果我更新了我的組件代碼,那工程在升級組件之后,程序必然會出現(xiàn)問題,如果我封裝成了framework,只在. h 文件中暴露出調(diào)用接口的話,是最安全的.

  • 如果以后我們的組件要公布出去,又不想開源代碼,只要創(chuàng)建一個(gè)Pod公開庫就可以.

在封裝成framework的情況下,調(diào)用者是看不見接口的內(nèi)部實(shí)現(xiàn)的,保證了代碼的安全性

封裝成framework有如下壞處:

  • 不方便調(diào)試,是封裝成framework最不方便的地方,出現(xiàn)一個(gè)小 bug, 我都需要在本地調(diào)試成功之后,打包成framework,然后去更新我的 pod 私有庫.這個(gè)過程是很麻煩的,無形增加了開發(fā)成本.

封裝成framework的利弊都說完了,大家可以根據(jù)自己的實(shí)際情況進(jìn)行選擇.

創(chuàng)建Pod私有庫

言歸正傳,當(dāng)我們要創(chuàng)建Pod私有庫時(shí),都需要做什么?

  1. 創(chuàng)建工程
  2. 創(chuàng)建Pod所對應(yīng)的podspec文件
  3. 創(chuàng)建私有的Spec Repo
  4. 本地測試podspec文件是否可用
  5. 向私有的Spec Repo中提交podspec
  6. 測試Spec Repo中的的 podspec 是否可用
  7. 私有庫關(guān)聯(lián)trunk 賬號

1. 創(chuàng)建工程

因?yàn)?github 的私有庫是付費(fèi)的,所以我使用碼云的私有倉庫.

創(chuàng)建完才想起來截圖,所以就變成這樣了,大家將就看一下吧

正常添加 License 這里我選擇的是 MIT License

把你的組件代碼上傳到倉庫

我的目錄結(jié)構(gòu)是這樣的

2. 創(chuàng)建Pod所對應(yīng)的podspec文件

切換到項(xiàng)目目錄下

cd ~/Desktop/foundationcategaries 

生成.podspec文件

$ pod spec create FoundationCategaries

FoundationCategaries替換成自己私有庫的名字,就像SDWebImage.

執(zhí)行完這句換之后,你就多了一個(gè)FoundationCategaries.podspec文件

Sublime Text或其他工具 打開FoundationCategaries.podspec文件,修改為一下樣式,注意修改完成后,不要有注釋信息.


Pod::Spec.new do |s|

  s.name         = "FoundationCategaries"
  s.version      = "0.1"   
  s.summary      = "Just Testing."

  s.description  = <<-DESC
                       Testing Private Podspec.

                       * Markdown format.
                       * Don't worry about the indent, we strip it!
                       DESC

  s.homepage     = "https://git.oschina.net/baozhatou"
  s.license      = "MIT"

  s.author             = { "Sean" => "xxxx@xxx.com" }

  s.source       = { :git => "https://git.oschina.net/xxx/foundationcategaries.git", :tag => "0.1" }

  s.platform     = :ios, '8.0'  

  s.requires_arc = true

  s.source_files  = 'FoundationCategories/FoundationCategories/*.{h,m}', 'FoundationCategories/FoundationCategories/*.{h,m}'

  s.frameworks = 'Foundation'    
end

修改完成后,把你的代碼FoundationCategaries.podspec文件提交碼云的倉庫.

3. 創(chuàng)建私有的Spec Repo

打開你cocopods 倉庫

open ~/.cocoapods/repos/

現(xiàn)在的目錄結(jié)構(gòu)是這樣的

pod repo add FoundationCategories http://git.oschina.net/xxx/foundationcategaries

執(zhí)行成功后你會發(fā)現(xiàn)當(dāng)前目錄下多了一個(gè)FoundationCategories的文件夾

切換到FoundationCategories路徑下

cd ~/.cocoapods/repos/FoundationCategories/

測試本地庫是否正確

pod lib lint

測試后,發(fā)現(xiàn)問題,就去修改,錯(cuò)誤信息一般提示的很明顯,成功后會提示如下:

4. 本地測試podspec文件是否可用

我們可以創(chuàng)建一個(gè)新的項(xiàng)目喇澡,在這個(gè)項(xiàng)目的Podfile文件中直接指定剛才創(chuàng)建編輯好的podspec文件迅栅,看是否可用。 在Podfile中我們可以這樣編輯

platform :ios, '8.0'

pod 'FoundationCategaries', :podspec => '~/.cocoapods/repos/FoundationCategories/FoundationCategaries.podspec'  # 指定podspec文件

然后執(zhí)行pod install命令安裝依賴

我這里遇到個(gè)錯(cuò)誤,如下

fatal: Remote branch 0.1 not found in upstream origin

這個(gè)錯(cuò)誤就是沒有找到碼云倉庫找到我的tag 0.1,所以出錯(cuò).因?yàn)槲覀冊?code>FoundationCategaries.podspec文件里面指定了tag 0.1

s.source       = { :git => "https://git.oschina.net/xxx/foundationcategaries.git", :tag => "0.1" }

cocopods去我們的倉庫找,卻沒有找到,所以會報(bào)錯(cuò)

那我們就去打一個(gè)0.1tag,讓cocopods找到就可以了

然后執(zhí)行pod install命令安裝依賴

安裝成功.

5. 向私有的Spec Repo中提交podspec

提交之前需要注冊Cocoapods賬號,如果有請忽略此步驟

pod trunk register xxx@xxx.com ‘snoopy’ --description='write for blog'

注冊成功,會給你發(fā)一封驗(yàn)證郵件.

打開郵件驗(yàn)證一下就好,如果發(fā)現(xiàn)自己沒有收到郵件,去垃圾郵件里面找一下,可能被攔截了.

驗(yàn)證之后,執(zhí)行pod trunk me,驗(yàn)證一下是否注冊成功.

成功后,切換到FoundationCategories目錄下

cd ~/.cocoapods/repos/FoundationCategories/

向私有的Spec Repo中提交podspec

pod repo push FoundationCategories FoundationCategaries.podspec  #前面是本地Repo名字 后面是podspec名字

完成之后這個(gè)組件庫就添加到我們的私有Spec Repo中了.

查找一下

pod search FoundationCategaries

ok

6. 測試Spec Repo中的的 podspec 是否可用

新建工程測試一下
Podfile 文件中添加FoundationCategaries

 pod 'FoundationCategaries', '~> 0.1'

完成之后,說明Spec Repo中的的 podspec 可用

7. 私有庫關(guān)聯(lián)trunk 賬號

以上建立了本地私有庫,如果更換設(shè)備,還想使用,就要給私有庫關(guān)聯(lián) trunk 賬號,關(guān)聯(lián)以后,我們以后就可以通過賬號管理和維護(hù)我們的私有庫了

pod trunk push

這樣表示關(guān)聯(lián)成功

這時(shí)候我們看看我們的 trunk賬戶信息

??,關(guān)聯(lián)完畢.

關(guān)于 trunk 的其他操作大家可以訪問trunk文檔,里面的內(nèi)容很詳細(xì).

這篇文章我們就講到這里,關(guān)于更新維護(hù)podspec我們會在下一篇文章詳細(xì)介紹.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晴玖,一起剝皮案震驚了整個(gè)濱河市读存,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呕屎,老刑警劉巖让簿,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異秀睛,居然都是意外死亡尔当,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門蹂安,熙熙樓的掌柜王于貴愁眉苦臉地迎上來居凶,“玉大人,你說我怎么就攤上這事藤抡。” “怎么了抹估?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵缠黍,是天一觀的道長。 經(jīng)常有香客問我药蜻,道長瓷式,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任语泽,我火速辦了婚禮贸典,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘踱卵。我一直安慰自己廊驼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布惋砂。 她就那樣靜靜地躺著妒挎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪西饵。 梳的紋絲不亂的頭發(fā)上酝掩,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機(jī)與錄音眷柔,去河邊找鬼期虾。 笑死原朝,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的镶苞。 我是一名探鬼主播喳坠,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼宾尚!你這毒婦竟也來了丙笋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤煌贴,失蹤者是張志新(化名)和其女友劉穎御板,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牛郑,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡怠肋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了淹朋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笙各。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖础芍,靈堂內(nèi)的尸體忽然破棺而出杈抢,到底是詐尸還是另有隱情,我是刑警寧澤仑性,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布惶楼,位于F島的核電站,受9級特大地震影響诊杆,放射性物質(zhì)發(fā)生泄漏歼捐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一晨汹、第九天 我趴在偏房一處隱蔽的房頂上張望豹储。 院中可真熱鬧,春花似錦淘这、人聲如沸剥扣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朦乏。三九已至,卻和暖如春氧骤,著一層夾襖步出監(jiān)牢的瞬間呻疹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刽锤,地道東北人镊尺。 一個(gè)月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像并思,于是被迫代替她去往敵國和親庐氮。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

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