cocoapods系列教程---安裝與使用
cocoapods系列教程---Podfile文件
cocoapods系列教程---Podfile.lock文件 和 Spec Repo
cocoapods系列教程---spec文件
cocoapods系列教程---原理篇
cocoapods系列教程---讓自己的開源框架支持cocoapods
cocoapods系列教程---模塊化設(shè)計(jì)
cocoapods系列教程---創(chuàng)建私有pods
參考:http://blog.wtlucky.com/blog/2015/02/26/create-private-podspec/
為什么要?jiǎng)?chuàng)建私有的pods ?,對(duì)于個(gè)人,比如我的某些代碼片段,工具類非常好用,但是我又不想公開,每次使用又要配置一遍,太麻煩,采用私有的可以完美解決上面的問題.對(duì)于公司,有些公司有多個(gè)項(xiàng)目,但是很多模塊其實(shí)是重復(fù)的;另外如果一個(gè)項(xiàng)目到后期會(huì)變得很大,稍微改動(dòng)一下,編譯時(shí)間都會(huì)很長,利用pod進(jìn)行拆分,每個(gè)人負(fù)責(zé)一個(gè)模塊,不僅加快了便以速度,而且方便維護(hù).缺點(diǎn)當(dāng)然也是有的,萬一哪天cocoapods死了,那就麻煩了.
創(chuàng)建私有pods與公有pods步驟基本一致,區(qū)別在于,私有pods的repo(存放spec文件的地方)是私有的,你的項(xiàng)目也是私有的,并且自己的電腦能夠訪問
這兩個(gè)地址.下面是詳細(xì)步驟:
- 創(chuàng)建并設(shè)置一個(gè)私有的Spec Repo。
- 創(chuàng)建Pod的所需要的項(xiàng)目工程文件,并且有可訪問的項(xiàng)目版本控制地址(可以是在本地或者遠(yuǎn)程倉庫)
- 創(chuàng)建Pod所對(duì)應(yīng)的podspec文件。
- 本地測(cè)試配置好的podspec文件是否可用。
- 向私有的Spec Repo中提交podspec。
- 在個(gè)人項(xiàng)目中的Podfile中增加剛剛制作的好的Pod并使用。
- 更新維護(hù)podspec
我們需要?jiǎng)?chuàng)建一個(gè)類似于master的私有Spec Repo,創(chuàng)建一個(gè) Git倉庫,這個(gè)倉庫你可以創(chuàng)建私有的也可以創(chuàng)建公開的,不過既然私有的Spec Repo,還是創(chuàng)建私有的倉庫吧,需要注意的就是如果項(xiàng)目中有其他同事共同開發(fā)的話,你還要給他這個(gè)Git倉庫的權(quán)限。因?yàn)镚itHub的私有倉庫是收費(fèi)的,我還不是GitHub的付費(fèi)用戶,所以我使用oschina創(chuàng)建私有倉庫.創(chuàng)建完成后執(zhí)行:
pod repo add 倉庫名 倉庫地址
例如:
pod repo add WTSpecs https://coding.net/wtlucky/WTSpecs.git
如果成功的話到~/.cocoapods/repos目錄下就可以看到WTSpecs這個(gè)目錄了。至此第一步創(chuàng)建私有Spec Repo完成.
驗(yàn)證是否成功:
cd ~/.cocoapods/repos/artsy-specs
$ pod repo lint .
成功會(huì)顯示:
All the specs passed validation.
PS:如果有其他合作人員共同使用這個(gè)私有Spec Repo的話在他有對(duì)應(yīng)Git倉庫的權(quán)限的前提下執(zhí)行相同的命令添加這個(gè)Spec Repo即可.
下一步,提供項(xiàng)目工程的可訪問的項(xiàng)目版本控制地址,這個(gè)倉庫應(yīng)該也是私有的,只有自己和同事能訪問.例如:
git add .
git commit -s -m "Initial Commit of Library"
git remote add origin git@coding.net:wtlucky/podTestLibrary.git
git push origin master
下一步,打上tag標(biāo)記,因?yàn)閜odspec根據(jù)tag來找到指定版本的
git tag -m "first release" 0.1.0
git push --tags #推送tag到遠(yuǎn)端倉庫
下一步,在項(xiàng)目根目錄創(chuàng)建并編輯podspec文件
pod spec create PodTestLibrary
用Xcode打開編輯,格式如下:
Pod::Spec.new do |s|
#名稱
s.name = "PodTestLibrary"
#版本號(hào)
s.version = "0.1.0"
#簡短介紹,下面是詳細(xì)介紹
s.summary = "Just Testing."
s.description = <<-DESC
#這里寫詳細(xì)介紹
DESC
#主頁,這里要填寫可以訪問到的地址,不然驗(yàn)證不通過,填個(gè)百度也行
s.homepage = "https://coding.net/u/wtlucky/p/podTestLibrary"
#截圖,如果沒有可以注釋掉這一行(前面加 # 注釋)
s.screenshots = "www.example.com/screenshots_1", "www.example.com/screenshots_2"
#開源協(xié)議,一般MIT
s.license = 'MIT'
#作者信息,后面是郵箱地址
s.author = { "wtlucky" => "wtlucky@foxmail.com" }
#項(xiàng)目地址,這里不支持ssh的地址,驗(yàn)證不通過,只支持HTTP和HTTPS,最好使用HTTPS
s.source = { :git => "https://coding.net/wtlucky/podTestLibrary.git", :tag => "0.1.0" }
#多媒體介紹地址
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
#支持的平臺(tái)及版本
s.platform = :ios, '7.0'
#是否使用ARC,如果指定具體文件,則具體的問題使用ARC
s.requires_arc = true
#代碼源文件地址,**/*表示Classes目錄及其子目錄下所有文件,如果有多個(gè)目錄下則用逗號(hào)分開,如果需要在項(xiàng)目中分組顯示,這里也要做相應(yīng)的設(shè)置
s.source_files = 'Pod/Classes/**/*'
#資源文件地址,建議直接用bundle,路徑為相對(duì)路徑,下同
s.resource_bundles = {
'PodTestLibrary' => ['Pod/Assets/*.png']
}
#公開頭文件地址
s.public_header_files = 'Pod/Classes/**/*.h'
#所需的framework,多個(gè)用逗號(hào)隔開
s.frameworks = 'UIKit'
#所需的依賴庫,多個(gè)用逗號(hào)隔開,z代表libz.tdb,前綴lib和后綴tdb可省略
spec.librarys = 'z'
#依賴關(guān)系,該項(xiàng)目所依賴的其他庫,如果有多個(gè)需要填寫多個(gè)s.dependency
s.dependency 'AFNetworking', '~> 2.3'
end
下一步,保存文件,需要驗(yàn)證一下這個(gè)文件是否可用,如果有任何WARNING或者ERROR都是不可以的,它就不能被添加到Spec Repo中,不過xcode的WARNING是可以存在的,驗(yàn)證需要執(zhí)行一下命令:
pod spec lint PodTestLibrary.podspec
如果驗(yàn)證通過會(huì)顯示:
PodTestLibrary passed validation.
驗(yàn)證通過表明這個(gè)podspec文件是合格的,不一定說明這個(gè)Pod是可以用的,我們需要在本地做一下驗(yàn)證.
下一步,本地驗(yàn)證:
我們可以創(chuàng)建一個(gè)新的項(xiàng)目,在這個(gè)項(xiàng)目的Podfile文件中直接指定剛才創(chuàng)建編輯好的podspec文件,看是否可用。 在Podfile中我們可以這樣編輯,有兩種方式:
platform :ios, '7.0'
pod 'PodTestLibrary', :path => '~/code/Cocoapods/podTest/PodTestLibrary' # 指定路徑
pod 'PodTestLibrary', :podspec => '~/code/Cocoapods/podTest/PodTestLibrary/PodTestLibrary.podspec' # 指定podspec文件
然后執(zhí)行pod install命令安裝依賴,打開項(xiàng)目工程,可以看到庫文件都被加載到Pods子項(xiàng)目中了,不過它們并沒有在Pods目錄下,而是跟測(cè)試項(xiàng)目一樣存在于Development Pods/PodTestLibrary中,這是因?yàn)槲覀兪窃诒镜販y(cè)試,而沒有把podspec文件添加到Spec Repo中的緣故。
下一步,向私有倉庫提交podspec
向Spec Repo提交podspec需要確認(rèn)podspec必須通過驗(yàn)證無誤,然后提交:
pod repo push WTSpecs PodTestLibrary.podspec
完成之后這個(gè)組件庫就添加到我們的私有Spec Repo中了,可以進(jìn)入到~/.cocoapods/repos/WTSpecs目錄下查看:
.
├── LICENSE
├── PodTestLibrary
│ └── 0.1.0
│ └── PodTestLibrary.podspec
└── README.md
再去看我們的Spec Repo遠(yuǎn)端倉庫,也有了一次提交,這個(gè)podspec也已經(jīng)被Push上去了,至此,我們的這個(gè)組件庫就已經(jīng)制作添加完成了,使用pod search命令就可以查到我們自己的庫了.如果過搜不到,看文章最后.
在完成這一系列步驟之后,我們就可以在正式項(xiàng)目中使用這個(gè)私有的Pod了
platform :ios, '7.0'
target "test" do
pod 'PodTestLibrary','~>0.1.0', source: 'https://coding.net/wtlucky/podTestLibrary.git'
end
到此完成.
這里有個(gè)偏方
:可以將spec文件保存到本機(jī)的~/.cocoapods/master/目錄中僅供自己使用,比較適合一個(gè)人.
多人開發(fā)
如果需要多個(gè)人維護(hù)一個(gè)庫,每個(gè)人都應(yīng)該有權(quán)限push提交;第一個(gè)push的人可以被認(rèn)為是管理員,可以再添加管理員,這樣管理員就有權(quán)限push了
pod trunk add-owner 郵箱地址
移除某個(gè)管理員
pod trunk remove-owner 郵箱地址
常見問題
- search命令搜索不到,更新一下倉庫就可以了
- 刪除指定版本,刪除后需要更新,否則還能搜到
-
pattern did not match any file
這個(gè)錯(cuò)誤是因?yàn)闆]有匹配到文件,很有可能是你的修改沒有提交到git遠(yuǎn)程倉庫 - 明明已經(jīng)提交了到pod倉庫了,還是提示
Unable to find a pod with name, author, summary, or descriptionmatching
,解決辦法
rm ~/Library/Caches/CocoaPods/search_index.json
- 本地驗(yàn)證通過了,也提交了podspec,也能search到,但是pod install的時(shí)候出現(xiàn)下面的提示
Unable to find a specification for
pod 'SGExtension','~>1.0.1', source: 'https://git.oschina.net/iOSSingeri/SGPodRepo.git'
需在podfile文件最上面加上私有pods倉庫地址:
source 'https://github.com/CocoaPods/Specs.git' # 官方庫
source 'https://git.coding.net/wtlucky/WTSpecs.git' # 私有庫
- 更新指定倉庫
pod repo update SGPodRepo