iOS組件化 - 制作pod上傳自己的Github

一.前言

  • 隨著公司項(xiàng)目的不斷迭代,業(yè)務(wù)的天馬行空。工程的代碼量和業(yè)務(wù)邏輯也越來(lái)越復(fù)雜蝇棉,原始的開(kāi)發(fā)模式和架構(gòu)已經(jīng)無(wú)法滿足我們的業(yè)務(wù)發(fā)展速度,想分離出一個(gè)模塊更是困難芥永。直到組件化的誕生篡殷,這也是我們?yōu)槭裁匆獡肀ЫM件化的原因。
    不得不說(shuō)組件化帶來(lái)的優(yōu)點(diǎn)還有有目共睹的:
    場(chǎng)景 如:
    • 聰明的產(chǎn)品張三有一天說(shuō):我們的IM業(yè)務(wù)日活埋涧、留存數(shù)據(jù)非常好板辽,所以我們想單獨(dú)拆出這個(gè)業(yè)務(wù)做個(gè)馬甲包。
    • 大廠~項(xiàng)目管理說(shuō)我們的項(xiàng)目是否做業(yè)務(wù)之間隔離了沒(méi)有飞袋。
    • 隨著業(yè)務(wù)不斷增加戳气,編譯速度和打包速度越來(lái)越慢链患。
    • 大廠~多個(gè)業(yè)務(wù)多人同時(shí)開(kāi)發(fā)巧鸭,等等。
  • 哈哈麻捻!以上都是題外話纲仍,下面開(kāi)始正文。

組件化分類:
共有庫(kù) - 所有人都能使用贸毕。(\color{red}{本文以共有庫(kù)為例})郑叠。
私有庫(kù) - 公司內(nèi)部擁有特殊權(quán)限才能使用。
framework - 公私都有明棍,動(dòng)態(tài)庫(kù)靜態(tài)庫(kù)乡革。只能看到.h文件。

二.步驟

準(zhǔn)備工作:
Github賬號(hào)一個(gè)(上傳組件工程用的)
安裝CocoaPods(創(chuàng)建并驗(yàn)證pod用的)
安裝Git 命令行 (首次上傳組件工程用的)
安裝Github Desktop或者SourceTree(后續(xù)更新組件用的摊腋,Git命令使用熟練者忽略此項(xiàng))


1.創(chuàng)建共有庫(kù)

  • 首先在Github創(chuàng)建一個(gè)新的Repository沸版。(你的Pods最終是要托管在Github平臺(tái)上的,所以先在Github上創(chuàng)建一個(gè)空的Repository兴蒸。)
    \color{red}{注意:“JHIMComponets”名字組成视粮;JH = 項(xiàng)目前綴,Componets = 組件}
    如:JHIMComponets = IM組件化模塊橙凳,這個(gè)看個(gè)人不強(qiáng)制蕾殴。

    repository.png

  • 下圖為創(chuàng)建成功后的樣子


    JHIMComponets.png

2.注冊(cè)Cocoapods賬戶

  • 想要?jiǎng)?chuàng)建一個(gè)開(kāi)源pod庫(kù), 首先我們需要注冊(cè)CocoaPods,基于Cocoapods已經(jīng)安裝好的前提下岛啸,這里是使用trunk 方式钓觉,只需要在終端執(zhí)行:
pod trunk register 郵箱地址 '用戶名' --verbose

如: pod trunk register xxxxxx@yeah.com 'JadeXH' --verbose

一般會(huì)使用GitHub郵箱和用戶名,當(dāng)然這個(gè)可以自由選擇坚踩,注冊(cè)之后荡灾,在郵箱中會(huì)收到確認(rèn)郵件,在瀏覽器中點(diǎn)擊鏈接確認(rèn)即注冊(cè)成功(小編遇到點(diǎn)擊鏈接地址后顯示:Internal server error 提示,不用理他直接驗(yàn)證)卧晓。成功之后可以終端執(zhí)行:

pod trunk me    //驗(yàn)證是否注冊(cè)成功

查看注冊(cè)信息芬首,以后可以使用該開(kāi)源Pod庫(kù)發(fā)布工具,也可以通過(guò)此方式查看已經(jīng)發(fā)布過(guò)的pods:

yourname@Jade-for-MacBook-Pro podTest % pod trunk me
  - Name:     yourname
  - Email:    yourname@yeah.net
  - Since:    March 28th, 02:32
  - Pods:     None
  - Sessions:
    - March 28th, 02:32 - August 4th, 04:13. IP: 124.126.200.29

3.在本地創(chuàng)建pod庫(kù)

  • 利用pod命令創(chuàng)建了名為JHIMComponets的Pod庫(kù)
    \color{red}{\normalsize{注意:這個(gè)名字要和你Github創(chuàng)建的Repository Name一致}}
cd yourname@Jade-for-MacBook-Pro downloads % 
# cd到downloads目錄下載逼裆,這個(gè)不強(qiáng)制請(qǐng)隨意郁稍。
yourname@Jade-for-MacBook-Pro downloads % pod lib create JHIMComponets
# 執(zhí)行 pod lib create JHIMComponets
  • 執(zhí)行完上述命令之后,會(huì)問(wèn)你幾個(gè)問(wèn)題胜宇,按需求填寫(xiě)即可


    pod create.png
# 你想使用哪個(gè)平臺(tái)耀怜?
1、What platform do you want to use?? [ iOS / macOS ]
iOS
# 庫(kù)語(yǔ)言選擇桐愉?
2财破、What language do you want to use?? [ Swift / ObjC ]
ObjC
# 是否需要一個(gè)demo工程,用于調(diào)試Pod从诲?
3左痢、Would you like include a demo application with your library? [ Yes / No ]
Yes
# 你要使用哪個(gè)測(cè)試框架?
4系洛、Which testing frameworks will you use? [ Specta / Kiwi / None ]
None
# 是否要UI測(cè)試俊性?
5、Would you like to do view based testing? [ Yes / No ]
NO
# 類名前綴描扯?
6定页、What is your class prefix?
JH
  • 到這里pod庫(kù)就創(chuàng)建完成了,它會(huì)自己打開(kāi)剛才創(chuàng)建的pod庫(kù)绽诚。
    目錄結(jié)構(gòu)如下圖:


    pod.png
  • (1)配置podspec
    配置詳解:
Pod::Spec.new do |s| 
  #庫(kù)名稱
  s.name             = 'JHIMComponets'
  #版本號(hào)
  s.version          = '0.1.0'
  #庫(kù)簡(jiǎn)短介紹
  s.summary          = 'A short description of JHIMComponets.'
  #開(kāi)源庫(kù)描述 
  s.description      = <<-DESC
TODO: Add long description of the pod here.
                       DESC
  #開(kāi)源庫(kù)地址典徊,或者是博客、社交地址等
  s.homepage         = 'https://github.com/JadeXH/JHIMComponets'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  #開(kāi)源協(xié)議
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  #開(kāi)源庫(kù)作者
  s.author           = { 'yourname' => 'yourname@yeah.net' }
  #源庫(kù)資源文件
  s.source           = { :git => 'https://github.com/JadeXH/JHIMComponets.git', :tag => s.version.to_s }
  #社交網(wǎng)址
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
  #開(kāi)源庫(kù)最低支持
  s.ios.deployment_target = '9.0'
  #源庫(kù)資源文件
  s.source_files = 'JHIMComponets/Classes/**/*'
  #添加資源文件
  # s.resource_bundles = {
  #   'JHIMComponets' => ['JHIMComponets/Assets/*.png']
  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  #依賴的系統(tǒng)庫(kù) 多個(gè)用逗號(hào)隔開(kāi)
  # s.frameworks = 'UIKit', 'MapKit'
  #引入第三方依賴庫(kù)
  # s.dependency 'AFNetworking', '~> 2.3'
end
  • 需要注意如圖:


    podspec.png
  • Readme主要是介紹這個(gè)組件的用途和使用的恩够,可以隨時(shí)編輯卒落。目前就確認(rèn)一下自己的名字和郵箱就可以了。


    readme.png
  • 協(xié)議文件玫鸟,也是確認(rèn)一下自己的名字和郵箱就可以了导绷。


    licence.png
  • (2)添加自己的類
    打開(kāi)pod庫(kù)目錄:

new.png

刪除ReplaceMe -> 創(chuàng)建JHIMComponet簡(jiǎn)單類,聲明一個(gè)打印函數(shù)屎飘,方便后續(xù)測(cè)試妥曲。
\color{red}{注意:創(chuàng)建類文件一定要放到class目錄下}


#import "JHIMComponet.h"

@implementation JHIMComponet

- (void)printJHIMComponet {
    NSLog(@"printJHIMComponet*****");
}

@end
  • 這時(shí)cd進(jìn)入Example路徑下執(zhí)行pod install命令,看看是否能將剛剛添加的庫(kù)文件引入到工程中
yourname@Jade-for-MacBook-Pro downloads % cd /Users/yourname/Downloads/JHIMComponets/Example
yourname@Jade-for-MacBook-Pro Example % pod install
pods.png

如果成功會(huì)在項(xiàng)目組Pods中看到钦购。

4.項(xiàng)目上傳與發(fā)布

cd到你的項(xiàng)目路徑下檐盟,將項(xiàng)目上傳到Github中(即剛剛創(chuàng)建的JHIMComponets共有庫(kù)中)依次使用下列命令行,不要遺漏押桃。

//
yourname@Jade-for-MacBook-Pro Example % cd /Users/yourname/Downloads/JHIMComponets

# 添加github項(xiàng)目路徑
yourname@Jade-for-MacBook-Pro JHIMComponets % git remote add origin https://github.com/JadeXH/JHIMComponets.git
# 添加文件
yourname@Jade-for-MacBook-Pro JHIMComponets % git add .
# 將暫存區(qū)里的改動(dòng)給提交到本地的版本庫(kù)
yourname@Jade-for-MacBook-Pro JHIMComponets % git commit -m "first commit"
# 創(chuàng)建分支main
yourname@Jade-for-MacBook-Pro JHIMComponets % git branch -M main
# 提交版本號(hào)并push到main分支
yourname@Jade-for-MacBook-Pro JHIMComponets % git push -u origin main

#注意這里的版本號(hào)要與.podspec中的版本號(hào)保持一致
yourname@Jade-for-MacBook-Pro JHIMComponets % git tag 0.1.0
yourname@Jade-for-MacBook-Pro JHIMComponets % git push origin 0.1.0

在執(zhí)行g(shù)it push -u origin main的時(shí)候如果遇到需要輸入用戶名和密碼:

Username for 'https://github.com': JadeXH
Password for 'https://JadeXH@github.com': 

\color{red}{\normalsize{需要注意的是:}}這個(gè)密碼不是你Github的登錄密碼葵萎,而是需要生成一個(gè)access tokens。

生成token步驟:需要在Github個(gè)人設(shè)置頁(yè) -> Settings -> Developer settings -> Personal access tokens 中創(chuàng)建一個(gè)token。


settings.png

1.設(shè)置token的有效期羡忘,訪問(wèn)權(quán)限等
2.選擇要授予此令牌token的范圍或權(quán)限谎痢。
3.要使用token從命令行訪問(wèn)倉(cāng)庫(kù),請(qǐng)選擇repo卷雕。
4.要使用token從命令行刪除倉(cāng)庫(kù)节猿,請(qǐng)選擇delete_repo
5.其他根據(jù)需要進(jìn)行勾選


token.png

delete.png

點(diǎn)擊Generate token生成的token(ghp_zR7Zm44QK*************Ui7zikChgv2bxMNZ)。

注意:
記得把你的token保存下來(lái)漫雕,因?yàn)槟阍俅嗡⑿戮W(wǎng)頁(yè)的時(shí)候滨嘱,你已經(jīng)沒(méi)有辦法看到它了。然后把這個(gè)token直接粘貼到命令行提示輸入密碼處就ok了浸间。


執(zhí)行完所有g(shù)it命令行后打開(kāi)瀏覽器輸入https://github.com/JadeXH/JHIMComponets就看到你的pod庫(kù)已經(jīng)push上去了太雨。

update.png

5.使用與驗(yàn)證

  • 新建個(gè)帶pod的項(xiàng)目,把我們做好的JHIMComponets加入podfile文件魁蒜。
# Uncomment the next line to define a global platform for your project
 platform :ios, '9.0'

target 'podTest' do
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!

  # Pods for podTest
  pod 'JHIMComponets',:git =>"https://github.com/JadeXH/JHIMComponets.git"
  
  
  target 'podTestTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'podTestUITests' do
    inherit! :search_paths
    # Pods for testing
  end
end
  • 執(zhí)行pod install
yourname@Jade-for-MacBook-Pro podTest % pod install
Analyzing dependencies
Pre-downloading: `JHIMComponets` from `https://github.com/JadeXH/JHIMComponets.git`
Downloading dependencies
Installing JHIMComponets (0.1.0)
Removing JHComponents
Generating Pods project
Integrating client project
Pod installation complete! There are 9 dependencies from the Podfile and 9 total pods installed.
  • 引入頭文件并打印結(jié)果


    import.png
print.png

6.版本更新與維護(hù)

  • 現(xiàn)在的JHIMComponets庫(kù)已經(jīng)在Github上托管了囊扳,以后維護(hù)這個(gè)項(xiàng)目就可以了(開(kāi)始本地創(chuàng)建的JHIMComponets項(xiàng)目就可以刪除了),管理Github倉(cāng)庫(kù)梅惯,\color{blue}{兩種方案任選}
  • 也可以使用Github Desktop
    下載Github Desktop登錄你的用戶名密碼宪拥,F(xiàn)ile ->Clone Repository


    Github Desktop.png

    其實(shí)Github Desktop更加可視化一些仿野,上面History就是剛才git命令行的記錄铣减。


    desk.png

6.總結(jié)

  • 終于寫(xiě)完了,哇哦脚作!凌晨了葫哗。寫(xiě)這篇文章初心也是為了加深印象,如果碰巧也能幫到您還請(qǐng)點(diǎn)個(gè)贊球涛,制作不易劣针。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市亿扁,隨后出現(xiàn)的幾起案子捺典,更是在濱河造成了極大的恐慌,老刑警劉巖从祝,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件襟己,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡牍陌,警方通過(guò)查閱死者的電腦和手機(jī)擎浴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)毒涧,“玉大人贮预,你說(shuō)我怎么就攤上這事。” “怎么了仿吞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵滑频,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我唤冈,道長(zhǎng)误趴,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任务傲,我火速辦了婚禮凉当,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘售葡。我一直安慰自己看杭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布挟伙。 她就那樣靜靜地躺著楼雹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尖阔。 梳的紋絲不亂的頭發(fā)上贮缅,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音介却,去河邊找鬼谴供。 笑死,一個(gè)胖子當(dāng)著我的面吹牛齿坷,可吹牛的內(nèi)容都是我干的桂肌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼永淌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼崎场!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起遂蛀,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谭跨,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后李滴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體螃宙,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年悬嗓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了污呼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡包竹,死狀恐怖燕酷,靈堂內(nèi)的尸體忽然破棺而出籍凝,到底是詐尸還是另有隱情,我是刑警寧澤苗缩,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布饵蒂,位于F島的核電站,受9級(jí)特大地震影響酱讶,放射性物質(zhì)發(fā)生泄漏退盯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一泻肯、第九天 我趴在偏房一處隱蔽的房頂上張望渊迁。 院中可真熱鬧,春花似錦灶挟、人聲如沸琉朽。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)箱叁。三九已至,卻和暖如春惕医,著一層夾襖步出監(jiān)牢的瞬間耕漱,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工抬伺, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留螟够,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓沛简,卻偏偏與公主長(zhǎng)得像齐鲤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子椒楣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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

  • 創(chuàng)建組件工程 啟動(dòng)命令行,使用pod命令創(chuàng)建組件 之后會(huì)彈出一些選項(xiàng)牡肉,按需要填即可: 至此捧灰,一個(gè)空的組件工程創(chuàng)建完...
    子天々君閱讀 3,636評(píng)論 0 6
  • 一毛俏、什么是組件化: 組件化就是將單一工程的項(xiàng)目按照功能職責(zé)或者業(yè)務(wù)職責(zé)劃分成一個(gè)一個(gè)模塊,模塊間解耦調(diào)用. 二、組...
    云霄_云霄閱讀 4,052評(píng)論 8 18
  • 目錄一饲窿、基礎(chǔ)使用創(chuàng)建私有的pod索引倉(cāng)庫(kù)創(chuàng)建網(wǎng)絡(luò)模塊LeelenNetwork私有庫(kù)使用注意事項(xiàng)二煌寇、依賴第三方庫(kù)三...
    楓葉情結(jié)閱讀 7,352評(píng)論 0 12
  • 組件化簡(jiǎn)介 想要做組件化的前提當(dāng)然得知道什么是組件化。顧名思義逾雄,組件化就是將APP拆分成各個(gè)組件(或者說(shuō)模塊也行)...
    Gui晨曦遇曉閱讀 9,452評(píng)論 9 46
  • 1阀溶、組件化的第一步就是創(chuàng)建私有庫(kù)腻脏,是iOS項(xiàng)目組件化開(kāi)發(fā)的基本操作。接下來(lái)就來(lái)說(shuō)一說(shuō)iOS中私有庫(kù)的創(chuàng)建方法银锻。為了...
    asmao閱讀 966評(píng)論 0 1