基本概念
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