基于GitLab搭建CocoaPods組件化管理

基本概念

  • CocoaPods
    CocoaPods是一個非常強(qiáng)大的管理iOS項(xiàng)目第三方依賴庫的工具,它可以解決庫與庫之間的依賴關(guān)系,下載庫的源碼,同時通過創(chuàng)建一個 Xcode 的 workspace 來將這些第三方庫與我們的工程連接起來外冀。關(guān)于CocoaPods的安裝和使用網(wǎng)絡(luò)資源很多暇矫,可以自行搜索和了解抖棘。

  • GitLab組件索引庫(spec倉庫)
    說到GitLab都不陌生,主要用來存放和管理我們的代碼妆距。它也可以作為我們的CocoaPods私有組件的資源索引庫,通過CocoaPods把這些組件關(guān)聯(lián)到我們的iOS工程中宾娜。

創(chuàng)建spec倉庫

和創(chuàng)建新的項(xiàng)目一樣,在git上創(chuàng)建一個spec索引倉庫(spec.git)滔吠,后續(xù)我們所有的私有組件庫全都放進(jìn)這個倉庫中來管理,它所對應(yīng)的git地址就是我們所有私有組件的源地址挠日。執(zhí)行如下命令:

pod repo add libSpec https://gitlab.libSpec.git

成功后,可以在我們本地的 ~/.cocoapods/repos 目錄下生成一個 libSpec 文件夾

創(chuàng)建一個本地 pod 庫(以mylib為例)

  • 在桌面新建一個文件夾翰舌,名字隨便起
  • cd到該文件夾下嚣潜,使用 pod 命令pod lib create mylib創(chuàng)建 pod 庫
 pod lib create mylib
  • 稍等一會,會出現(xiàn)一些選擇步驟椅贱,基本上按照如下填寫問題不大懂算,一路回車,創(chuàng)建完成后會自動打開我們當(dāng)前的pod庫庇麦。
pod lib create mylib
...
------------------------------
...
What platform do you want to use?? [ iOS / macOS ]
 > ios

Possible answers are [ iOS / macOS ]
 > ios

What language do you want to use?? [ Swift / ObjC ]
 > swift

Would you like to include a demo application with your library? [ Yes / No ]
 > yes

Which testing frameworks will you use? [ Quick / None ]
 > none

Would you like to do view based testing? [ Yes / No ]
 > no
  • 目錄說明
mylib
├── LICENSE
├── mylib
│   ├── Assets
│   ├── Classes
│   │   ├── AppLanguage.swift
│   │   ├── AppTool.swift
│   │   └── DeviceTool.swift
│   └── Vendors
├── mylib.podspec
├── Example
└── _Pods.xcodeproj

主要說明一下mylib文件夾下的Classes和Vendors兩個文件夾计技。其中Classes是自動生成的,且有一個ReplaceMe.m文件山橄,可以直接刪掉垮媒,Vendors是我新建的。結(jié)合下面的.podspec配置文件說明航棱,s.source_files 配置對外開放的源碼文件的相對路徑,Classes文件夾里面放我們生成的類文件睡雇。s.vendored_frameworks配置本地需要的framework,比如比如騰訊饮醇、阿里等一些需要購買的sdk等它抱,Vendors文件夾下存放那些.framework等靜態(tài)庫文件。格式參考如下

s.vendored_frameworks = 'mylib/Vendors/AlivcLivePusher.framework','MediaTrackKit/Vendors/AlivcLibRtmp.framework'
  • .podspec配置文件說明

查看上面自動打開的pod庫項(xiàng)目結(jié)構(gòu)朴艰,我們會找到一個名為“mylib.podspec”的文件观蓄,它是該pod庫的配置文件。

Pod::Spec.new do |s|
  s.name             = 'mylib' # 我們對外提供的庫名祠墅,也是我們通過pod search xxxx搜索的名字
  s.version          = '0.1.0' # 版本(tag)侮穿,需要和我們的 tag 保持一致
  s.summary          = 'mylib'# pod search 搜索的關(guān)鍵詞
  s.description      = 'xxxxxxxxxx' # 文案要比summary 長,否則會有個驗(yàn)證不過的問題
  s.homepage         = 'https://git.mylib' # 主頁地址饵隙,例如gitlab 地址
  s.license          = { :type => 'MIT', :file => 'LICENSE' }     #許可證
  s.author           = { 'ccc' => 'ccc@xxx.cn' } # 作者
  s.source           = { :git => 'https://git.mylib.git', :tag => s.version.to_s }# Git倉庫地址
  s.ios.deployment_target = '9.0' // 與主工程保持一致
  s.source_files = 'mylib/Classes/**/*'# 源碼文件的配置路徑撮珠,所有對外可以引用到的代碼都在這個目錄下
  s.vendored_frameworks = '' # pod庫引用的本地framework,比如騰訊金矛、阿里等一些需要購買的sdk
end
  • cd到Example芯急,執(zhí)行如下命令更新一下這個工程的pod庫
pod install
  • 驗(yàn)證podspec文件
pod lib lint 或者 pod lib lint --allow-warnings// 驗(yàn)證.podspec文件是否符合規(guī)范
pod lib lint --sources="cocoapods私有庫地址" --allow-warnings // 如果我們的庫依賴其他第三方庫,則需要將它的索引庫地址也得寫上驶俊,MediaTrackKit不需要執(zhí)行
pod lib lint --sources="cocoapods私有庫遠(yuǎn)程地址" --use-libraries --allow-warnings // 如果第三方私有庫又依賴了其他的庫

--allow-warnings 允許有任何的Warning
--verbose 獲取更多錯誤信息
--use-libraries 包含.a 需要添加此參數(shù)

  • 創(chuàng)建遠(yuǎn)程代碼庫娶耍,并將mylib提交到gitlab

在gitlab上創(chuàng)建新的項(xiàng)目,命名為mylib,最好勾選“Initialize repository with a README”饼酿,默認(rèn)添加README.md文件榕酒,并生成master分支胚膊。cd到本地代碼,依次執(zhí)行:

git status -- 查看當(dāng)前git存了什么文件
git add . -- 將所有文件緩存到待提交文件區(qū)域
git commit -m "上傳工程" -- 提交文件想鹰,寫上備注
git remote add origin https://xxxx.git -- 添加要推送的遠(yuǎn)程倉庫地址
git push -u origin master -- 將代碼推送到遠(yuǎn)程倉庫的master分支

  • 新增tag(當(dāng)私有庫更新紊婉,最好tag也更新)
git tag 0.1.0 
git push --tags

將spec文件push到遠(yuǎn)程索引倉庫(將mylib的spec推到libSpec倉庫中)

  • 遠(yuǎn)程校驗(yàn)
pod spec lint --sources="https://git.libSpec.git" --use-libraries --allow-warnings
  • push
pod repo push libSpec(本地索引庫的名稱)mylib.podspec(podspec文件名)

成功以后,本地cocoapods目錄結(jié)構(gòu)如下:

repos
├── libSpec
│   ├── mylib
│   │   └── 0.1.0
│   │       └── mylib.podspec
│   └── README.md
├── README.md
├── Spec_Lock
├── cocoapods
└── trunk
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辑舷,一起剝皮案震驚了整個濱河市喻犁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌何缓,老刑警劉巖肢础,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異碌廓,居然都是意外死亡传轰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門谷婆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慨蛙,“玉大人,你說我怎么就攤上這事纪挎」傻” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵廷区,是天一觀的道長唯灵。 經(jīng)常有香客問我,道長隙轻,這世上最難降的妖魔是什么埠帕? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮玖绿,結(jié)果婚禮上敛瓷,老公的妹妹穿的比我還像新娘。我一直安慰自己斑匪,他們只是感情好呐籽,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蚀瘸,像睡著了一般狡蝶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贮勃,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天贪惹,我揣著相機(jī)與錄音,去河邊找鬼寂嘉。 笑死奏瞬,一個胖子當(dāng)著我的面吹牛枫绅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播硼端,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼并淋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了珍昨?” 一聲冷哼從身側(cè)響起预伺,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎曼尊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脏嚷,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骆撇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了父叙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片神郊。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖趾唱,靈堂內(nèi)的尸體忽然破棺而出涌乳,到底是詐尸還是另有隱情,我是刑警寧澤甜癞,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布夕晓,位于F島的核電站,受9級特大地震影響悠咱,放射性物質(zhì)發(fā)生泄漏蒸辆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一析既、第九天 我趴在偏房一處隱蔽的房頂上張望躬贡。 院中可真熱鬧,春花似錦眼坏、人聲如沸拂玻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽檐蚜。三九已至,卻和暖如春沿侈,著一層夾襖步出監(jiān)牢的瞬間熬甚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工肋坚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乡括,地道東北人肃廓。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像诲泌,于是被迫代替她去往敵國和親盲赊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348