Swift 組件化開(kāi)發(fā)之創(chuàng)建遠(yuǎn)程私有庫(kù)

好好學(xué)習(xí)著榴,天天向上

前言

組件化的優(yōu)點(diǎn)

優(yōu)點(diǎn)

  • 降低耦合度
  • 組件單獨(dú)開(kāi)發(fā)番宁,獨(dú)立測(cè)試
  • 多人協(xié)作開(kāi)發(fā)

缺點(diǎn)

  • 版本同步的問(wèn)題

組件化劃分

基礎(chǔ)組件

基礎(chǔ)配置(經(jīng)常用到的宏,常量)深胳,分類(lèi),網(wǎng)絡(luò)(AFN佩研、SDW二次封裝)、工具類(lèi)(日期時(shí)間的處理霞揉,文件處理旬薯,設(shè)備處理)

功能組件

控間(彈幕、輪播器适秩、選項(xiàng)卡)绊序;功能(斷點(diǎn)續(xù)傳,音頻處理)

業(yè)務(wù)組件

業(yè)務(wù)線(xiàn)一秽荞,業(yè)務(wù)線(xiàn)二

正文

前面都是開(kāi)場(chǎng)白骤公,直接進(jìn)入主題

步驟歸納:

  1. 創(chuàng)建遠(yuǎn)程索引庫(kù)
  2. 將遠(yuǎn)程索引庫(kù)添加到本地
  3. 創(chuàng)建本地私有庫(kù),完成測(cè)試
  4. 修改Spec文件
  5. 提交私有庫(kù)代碼并增加tag
  6. 提交spec至私有索引庫(kù)
  7. 測(cè)試

步驟詳細(xì)說(shuō)明:

0.插播一下即將用到的pod命令

  • pod repo add 索引庫(kù)名稱(chēng) 索引庫(kù)地址: 添加自己的索引庫(kù)
  • pod lib create 組件名:在本地創(chuàng)建一個(gè)基于pod模板的git倉(cāng)庫(kù)
  • pod lib lint: 本地庫(kù)驗(yàn)證
  • pod spec lint: 遠(yuǎn)程庫(kù)驗(yàn)證
  • pod repo push 索引庫(kù)名稱(chēng) .podspec文件: 先將pod索引添加到本地的索引庫(kù),然后會(huì)自動(dòng)推送到遠(yuǎn)程的索引庫(kù)

1. 創(chuàng)建私有索引庫(kù)

遠(yuǎn)程索引庫(kù)創(chuàng)建是以常用的【碼云】為例的扬跋,如下圖所示阶捆。

1.png

2. 將私有索引庫(kù)添加到本地

2.1 通過(guò)pod repo命令行,查看pod源地址

2.png

如上圖钦听,目前我的本地只有一個(gè)github上的公有索引庫(kù)洒试。

2.2 通過(guò)插播的pod命令,添加遠(yuǎn)程索引庫(kù)到本地

執(zhí)行以下命令:
pod repo add KPSpecs https://gitee.com/katypei/KPSpecs.git

2.3 驗(yàn)證索引庫(kù)是否添加到本地成功

重新執(zhí)行pod repo即可朴上。

3.png

如上圖所示垒棋,及添加成功。

3.創(chuàng)建本地私有庫(kù)(此處以KPExtension為例)

3.1 在【碼云】創(chuàng)建組件庫(kù)痪宰,庫(kù)名為KPExtension

3.2 通過(guò)pod命令叼架,在本地創(chuàng)建一個(gè)基于pod模板的git倉(cāng)庫(kù),倉(cāng)庫(kù)名如3.1

pod lib create KPExtension

使用以上命令衣撬,需要進(jìn)行一些信息的配置

5.png

以上配置針對(duì)個(gè)人需要進(jìn)行配置乖订,此處因?yàn)槲冶救耸窍M麆?chuàng)建一個(gè)swift的遠(yuǎn)程私有庫(kù),所以此處語(yǔ)言我選擇了Swift具练。配置完成之后垢粮,會(huì)自動(dòng)打開(kāi)一個(gè)響應(yīng)的Example項(xiàng)目。該項(xiàng)目如下:

7.png

將需要放到該私有庫(kù)的文件替換Classes文件夾中的Replace.swift靠粪。如下所示:

8.png

3.將上述文件拖動(dòng)到對(duì)應(yīng)位置(也就是之前ReplaceMe.swift之前所在的文件夾下)蜡吧,如下圖所示:

9.png

4. 執(zhí)行pod install命令,在Example中進(jìn)行測(cè)試占键,確保組件可用昔善。

4.修改Spec文件

10.png

以下是Spec文件簡(jiǎn)單介紹

  s.name         = "KPExtension(倉(cāng)庫(kù)名稱(chēng))"
  s.version      = "0.0.1(版本號(hào),這里跟下面s.source中的tag有關(guān))"
  s.summary      = "對(duì)你自己倉(cāng)庫(kù)的簡(jiǎn)單描述畔乙,不要寫(xiě)太多字"
  s.description  = "這個(gè)是詳細(xì)描述君仆,需要比s.summary的要長(zhǎng),不然會(huì)出現(xiàn)警告"
  s.homepage     = "倉(cāng)庫(kù)首頁(yè)地址,如https://github.com/KityPei/KPExtension"
  s.license      = "MIT"
  s.author       = { 'KityPei' => 'kity_pei@163.com' }
  # source存放的地址是代碼的真正地址
  s.source       = { :git => "倉(cāng)庫(kù)對(duì)應(yīng)的git地址返咱,如https://gitee.com/katypei/KPExtension.git", :tag => "#{s.version}" }
  # pod install時(shí)真正下載下來(lái)的文件路徑钥庇,這里指定的是你倉(cāng)庫(kù)下的Classes目錄中的所有.h和.m文件(填寫(xiě)的是相對(duì)地址)
  # ** 通配目錄

  s.source_files  = 'KPExtension/Classes/**/*'

  # s.resource_bundles = {
  #   'KPExtension' => ['KPExtension/Assets/*.png']
  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  # s.frameworks = 'UIKit', 'MapKit'
  # s.library = "sqlite3" # 框架依賴(lài)系統(tǒng)的sqlite3

主要需要修改的地方:

s.name         = "KPExtension"
s.version      = '0.0.1'
s.summary      = '常用到的分類(lèi)'
s.homepage     = 'https://gitee.com/katypei'
s.source       = { :git => 'https://gitee.com/katypei/KPExtension.git', :tag => s.version.to_s }

非常重要的事情
s.source要修改成對(duì)應(yīng)的git地址
s.source要修改成對(duì)應(yīng)的git地址
s.source要修改成對(duì)應(yīng)的git地址

5. 提交私有庫(kù)代碼并增加tag

5.1 將代碼提交到組件倉(cāng)庫(kù),常用的git命令咖摹,git工具就不說(shuō)了

git add .  // 工作時(shí)的所有變化提交到暫存區(qū)
git commit -m '注釋'   // 提交到版本庫(kù)
git remote add origin https://gitee.com/katypei/KPExtension.git
git push -u origin master

5.2 打上tag

git tag '0.0.1'
git push --tags

6. 提交spec至私有索引庫(kù)

6.1 本地驗(yàn)證Spec的必填字段

pod lib lint

驗(yàn)證通過(guò)如下圖:

本地驗(yàn)證通過(guò).png

6.2 遠(yuǎn)程驗(yàn)證Spec

pod spec lint

驗(yàn)證通過(guò)如下圖:

遠(yuǎn)端驗(yàn)證通過(guò).png

6.3 提交podspec

執(zhí)行以下命令评姨,將我們的代碼直接push到本地索引庫(kù)KPSpecs,推送后會(huì)自動(dòng)幫我們同步到遠(yuǎn)程索引庫(kù)

pod repo push KPSpecs KPExtension.podspec 

成功可以如下圖所示:

添加到私有索引庫(kù)成功.png

成功也可以如下圖所示:

使用Finder查找萤晴,路徑應(yīng)該如下:

~/.cocoapods/repos/
文件顯示.png

7. 測(cè)試

測(cè)試就不多說(shuō)了吐句,注意事項(xiàng)就是要指定pod源,否則可能找不到創(chuàng)建的私有遠(yuǎn)程店读。

即在podfile文件中添加:

source 'https://github.com/CocoaPods/Specs.git'  # github的公有索引庫(kù)
source 'https://gitee.com/katypei/KPSpecs.git' # 自己的私有索引庫(kù)

踩坑之旅

問(wèn)題一:

在進(jìn)行本地驗(yàn)證的時(shí)候嗦枢,出現(xiàn)以下錯(cuò)誤:

11.png

出現(xiàn)這種情況的原因:

因?yàn)橹谱鞯氖?code>Swift的私有庫(kù),沒(méi)有指定Swift語(yǔ)言的版本屯断,驗(yàn)證器默認(rèn)使用的是Swift 3.2文虏,可能會(huì)出現(xiàn)問(wèn)題,希望指定Swift語(yǔ)言的版本殖演。

解決方案:

  1. 使用pod lib lint --alow-warnings命令忽略驗(yàn)證過(guò)程中的警告(使用的該命令應(yīng)該注意你包裝過(guò)的庫(kù)盡量是沒(méi)問(wèn)題的)择葡;
  2. 修改.podspec文件,新增一行s.swift_version = '4.0'剃氧,指定Swift語(yǔ)言的版本敏储,當(dāng)然馬上就出Swift 5.0了;
  3. 在工程目錄執(zhí)行echo "4.0" > .swift-version,在驗(yàn)證配置文件的時(shí)候執(zhí)行pod spec lint prcject.podspec --swift-version=4.0 –verbose指定Swift的版本朋鞍。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末已添,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子滥酥,更是在濱河造成了極大的恐慌更舞,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坎吻,死亡現(xiàn)場(chǎng)離奇詭異缆蝉,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)瘦真,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)刊头,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人诸尽,你說(shuō)我怎么就攤上這事原杂。” “怎么了您机?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵穿肄,是天一觀(guān)的道長(zhǎng)年局。 經(jīng)常有香客問(wèn)我,道長(zhǎng)咸产,這世上最難降的妖魔是什么矢否? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮脑溢,結(jié)果婚禮上僵朗,老公的妹妹穿的比我還像新娘。我一直安慰自己焚志,他們只是感情好衣迷,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布畏鼓。 她就那樣靜靜地躺著酱酬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪云矫。 梳的紋絲不亂的頭發(fā)上膳沽,一...
    開(kāi)封第一講書(shū)人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音让禀,去河邊找鬼挑社。 笑死,一個(gè)胖子當(dāng)著我的面吹牛巡揍,可吹牛的內(nèi)容都是我干的痛阻。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼腮敌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼阱当!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起糜工,我...
    開(kāi)封第一講書(shū)人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤弊添,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后捌木,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體油坝,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年刨裆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了澈圈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡帆啃,死狀恐怖极舔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情链瓦,我是刑警寧澤拆魏,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布盯桦,位于F島的核電站,受9級(jí)特大地震影響渤刃,放射性物質(zhì)發(fā)生泄漏拥峦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一卖子、第九天 我趴在偏房一處隱蔽的房頂上張望略号。 院中可真熱鬧,春花似錦洋闽、人聲如沸玄柠。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)羽利。三九已至,卻和暖如春刊懈,著一層夾襖步出監(jiān)牢的瞬間这弧,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工虚汛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留匾浪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓卷哩,卻偏偏與公主長(zhǎng)得像蛋辈,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子将谊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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