本文主要介紹的內(nèi)容是如何使用Cocoapods搭建私有Spec倉(cāng)庫(kù), 涉及私有Pod提交以及私有Pod版本更新。平常開(kāi)發(fā)中常用的使用場(chǎng)景就是大家口中經(jīng)常提到的“組件化開(kāi)發(fā)”。
私有Pod創(chuàng)建步驟:
- 依賴git托管平臺(tái)管理私有Spec倉(cāng)庫(kù);
- 創(chuàng)建Pod的所需要的項(xiàng)目工程文件;
- 創(chuàng)建私有的Spec倉(cāng)庫(kù)管理podspec文件;
- 創(chuàng)建私有podspec文件并編輯相關(guān)內(nèi)容;
- 驗(yàn)證podspec文件的有效性;
- 提交podspec文件至私有spec倉(cāng)庫(kù);
- 測(cè)試使用已提交的私有pod;
- 私有pod版本更新
依賴遠(yuǎn)程或本地git托管平臺(tái)
私有Spec倉(cāng)庫(kù)需要依托于git托管平臺(tái),本文使用的是碼云(OSChina提供托管平臺(tái))進(jìn)行演示。
在碼云上新建新的項(xiàng)目 MBKitSpace。
創(chuàng)建完成之后在Terminal中執(zhí)行如下命令:
# pod repo add [Private Repo Name] [GitHub HTTPS clone URL]
pod repo add MBKitSpace https://git.oschina.net/YuriZhang/mbkitspace.git
如果成功的話進(jìn)入到 ~/.cocoapods/repos 目錄下就可以看到 MBKitSpace 這個(gè)目錄了。至此第一步創(chuàng)建私有Spec Repo完成了。
創(chuàng)建私有的項(xiàng)目工程文件
第二步,如果有現(xiàn)有的項(xiàng)目,并且還在git下進(jìn)行管理的可以忽略這一步。如果沒(méi)有,那就新建一個(gè)或者拖入一個(gè)希望進(jìn)行管理的組件。
在功能穩(wěn)定后在當(dāng)前分支打tag,并push到遠(yuǎn)程倉(cāng)庫(kù)
創(chuàng)建私有Pod的podspec
首先,進(jìn)入到工程的根目錄下,即 ~/.cocoapods/repos/MBKitSpace
。
執(zhí)行 pod spec create 工程名
, 創(chuàng)建成功后會(huì)在工程的根目錄下創(chuàng)建 MBKitSpace.podspec 文件。
常用podspec文件的設(shè)置:
Pod::Spec.new do |s|
# 私有pod名稱
s.name = "MBKit"
# 當(dāng)前版本號(hào)
s.version = "0.0.2"
# 項(xiàng)目描述
s.summary = " just a summary"
# 項(xiàng)目簡(jiǎn)介
s.description = <<-DESC
just a description
DESC
# 倉(cāng)庫(kù)首頁(yè)地址
s.homepage = "http://git.oschina.net/YuriZhang"
# license
s.license = { :type => "MIT", :file => "LICENSE" }
# 作者信息
s.author = { "Author" => "Email" }
# 平臺(tái)
s.platform = :ios
# 平臺(tái)版本
s.platform = :ios, "8.0"
# 倉(cāng)庫(kù)源
s.source = { :git => "https://git.oschina.net/YuriZhang/mbkitspace.git", :tag => "#{s.version}" }
# 代碼源文件地址,**/*表示Classes目錄及其子
s.source_files = "MBKitTest", "MBKitTest/**/*.{h,m}"
s.exclude_files = "Classes/Exclude"
如何添加資源文件
1.添加xib
在pod中,xib不能當(dāng)成源文件(即s.source_files),否則pod install之后會(huì)報(bào)錯(cuò)"Unable to run command 'StripNIB xxx.nib' - this target might include its own product".所以必須要將xib放入資源文件中(即s.resources)
使用此方式后,雖然可以在不改變?cè)瓁ib任何代碼的情況下直接使用,但是需要將xib中使用到的圖片文件拷貝到當(dāng)前項(xiàng)目的Assets.xcassets中
2.添加圖片
方式1:類似于xib,不需其它操作,將用到圖片添加到當(dāng)前項(xiàng)目Assets.xcassets中;
方式2:將圖片放入s.Resource(或者s.resource_bundles)中
驗(yàn)證podspec文件有效性
-
執(zhí)行
pod lib lint
輸出如下結(jié)果即為通過(guò):
lib lint.png注:如果出現(xiàn)當(dāng)前私有庫(kù)依賴某一個(gè)私有庫(kù)的時(shí)候需要執(zhí)行以下命令
pod lib lint --verbose --no-clean --use-libraries --allow-warnings --sources='私有庫(kù) 源,https://github.com/CocoaPods/Specs'
-
執(zhí)行
pod spec lint
輸出如下結(jié)果即為通過(guò):
spec lint.png
如果以上兩步全部通過(guò),就證明podspec文件配置成功。
提交podspec至私有倉(cāng)庫(kù)
在podspec所出文件目錄執(zhí)行 pod repo push MBKitSpace MBKit.podspec
執(zhí)行完成之后這個(gè)組件庫(kù)就添加到我們的私有Spec Repo中了,可以進(jìn)入到~/.cocoapods/repos/MBKitSpace目錄下查看,就可以看到提交的對(duì)應(yīng)版本信息了。
至此,我們的這個(gè)組件庫(kù)就已經(jīng)制作添加完成了。
使用私有倉(cāng)庫(kù)
-
執(zhí)行
pod search MBKit
查詢私有倉(cāng)庫(kù)
search.png -
創(chuàng)建Podfile文件,在 Podfile 文件開(kāi)頭中添加:
source 'https://git.oschina.net/YuriZhang/mbkitspace.git' source 'https://github.com/CocoaPods/Specs.git'
如果不添加官方庫(kù)地址,若私有庫(kù)的類庫(kù)的子依賴,依賴了公有庫(kù)某個(gè)類庫(kù),會(huì)導(dǎo)致pod install失敗。
更新私有倉(cāng)庫(kù)
首先,更新的場(chǎng)景肯定是在原有項(xiàng)目的基礎(chǔ)上進(jìn)行了業(yè)務(wù)的擴(kuò)展或者原有功能的改進(jìn)。
具體的操作步驟如下:
- 首先修改podspec文件中的s.version;
- 新功能增加或原有功能改進(jìn),打tag并push到遠(yuǎn)程倉(cāng)庫(kù);
- 驗(yàn)證podspec文件的有效性
- 推送podspec至遠(yuǎn)程倉(cāng)庫(kù)
常用的pod指令
- 顯示本地repo列表
pod repo list
- 刪除本地repo
pod repo remove <REPO_NAME>
- 更新某個(gè)repo
pod repo update <REPO_NAME>
坑!大坑!
- 提交成功后搜索不到結(jié)果
[!] Unable to find a pod with name, author, summary, or description matching `Trangram`
解決辦法:
執(zhí)行 rm ~/Library/Caches/CocoaPods/search_index.json
成功后重新搜索。
-
pod lib lint
報(bào)錯(cuò)
ERROR | [iOS] file patterns: The `source_files` pattern did not match any file.
解決辦法:重新打開(kāi)xxx.podspec文件編輯一下,確定共享文件路徑?jīng)]有錯(cuò)誤,然后再上傳到github上驗(yàn)證。
-
pod lib lint
報(bào)錯(cuò)
WARN | description: The description is equal to the summary.
解決辦法: 重新打開(kāi)xxx.podspec文件編輯一下,確定s.summary內(nèi)容與s.description不相同
- 在私有庫(kù)引用了私有庫(kù)的情況下,在驗(yàn)證和推送私有庫(kù)的情況下都要加上所有的資源地址,不然pod會(huì)默認(rèn)從官方repo查詢。
pod spec lint --sources='私有倉(cāng)庫(kù)repo地址,https://github.com/CocoaPods/Specs'
pod repo push 本地repo名 podspec名 --sources='私有倉(cāng)庫(kù)repo地址,https://github.com/CocoaPods/Specs'
- 引用自己或第三方的framework或.a文件時(shí)
在podsepc中應(yīng)該這樣寫:
s.ios.vendored_frameworks = "xxx/**/*.framework"
s.ios.vendored_libraries = "xxx/**/*.a”
更多坑請(qǐng)移步這里查看。