1. 創(chuàng)建私有Spec Repo
什么是Spec Repo?它是所有的Pods的一個索引,就是一個容器,所有公開的Pods都在這個里面,它實際是一個Git倉庫remote端在GitHub上,但是當(dāng)你使用了Cocoapods后它會被clone到本地的~/.cocoapods/repos目錄下,可以進入到這個目錄看到master文件夾就是這個官方的Spec Repo了。
第一步:先在GitHub上創(chuàng)建一個repository
創(chuàng)建好之后,需要使用的是下面這個鏈接:
第二步:在終端輸入以下命令:
# pod repo add [Private Repo Name] [GitHub HTTPS clone URL]
pod repo add test https://github.com/jinyuisme/test.git
此時如果成功的話進入到~/.cocoapods/repos目錄下就可以看到test(只是個名字,會根據(jù)你設(shè)置的名稱而不同) 這個目錄了。至此第一步創(chuàng)建私有Spec Repo完成。剛開始的時候你的test應(yīng)該是空的,只是多個Specs-Repo文件夾而已。
2. 創(chuàng)建Pod項目工程文件?
我們將要使用?Pod Lib Create來創(chuàng)建一個工程。 就拿我創(chuàng)建的test為例子具體講一下這里是如何操作的,先cd到要創(chuàng)建項目的目錄然后執(zhí)行
?pod lib create test
之后會問我們幾個問題,1.選擇一個平臺:iOS;2.所使用的語言:(根據(jù)自己實際情況選擇swift?objc);3.是否需要一個例子工程:Yes;4.選擇一個測試框架:Specta;5.是否基于View測試:Yes;6.類的前綴:TS。 輸入完成之后會自動執(zhí)行pod install命令創(chuàng)建項目并生成依賴。
在目錄中我們可以看到剛才創(chuàng)建的項目,目錄就不一一列舉,我們需要在文件夾中添加庫文件和資源,并配置podspec文件。我把需要上傳的組件放入test/Classes中,然后進入Example文件夾執(zhí)行pod update命令,再打開項目工程可以看到,剛剛添加的組件已經(jīng)在Pods子工程下Development Pods/PodTestLibrary中了,然后編輯demo工程,進行所需編譯運行,沒問題我們再進行下一步操作。
3.添加并提交到遠端倉庫
在終端繼續(xù)操作
git add . ? ??
git commit -s -m?"Initial Commit of Library"
git remote add origin?git@github.com:jinyuisme/test.git #添加遠端倉庫
git push origin master #提交到遠端倉庫
如果輸入$ git remote add origin?git@github.com:jinyuisme(github用戶名)/test(項目名).git?提示出錯信息:fatal: remote origin already exists.
解決辦法如下:
git remote rm origin
git remote add origin?git@github.com:jinyuisme/test.git
然后繼續(xù)執(zhí)行g(shù)it push origin master操作,如果出現(xiàn)以下信息,說明操作不成功
問題原因:
在git上沒有創(chuàng)建SSH?Key
解決方法:
繼續(xù)在終端輸入以下指令
ssh-keygen -t rsa -C "username" (注:username為你git上的用戶名)
三次回車,如有看到The key's randomart image is,代表你的SSH Key生成成功了。然后輸入指令:
cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB 開頭的一長串就是你的SSH Key了。
然后將一長串SSH Key粘貼到自己的git賬戶上。
然后再執(zhí)行一次git push origin master操作,如果出現(xiàn)以下錯誤
輸入
git push -f?
然后再打上一個tag
git tag -m "first release" "0.1.0"?
git push --tags ? ?#推送tag到遠端倉庫
4.編輯podspec文件
做完這些就可以開始編輯podspec文件了,以下就是我的podspec文件
Pod::Spec.new do |s|
s.name = 'test' #名稱
s.version = '0.1.0' #版本號
s.summary = '這是一個工具類' #簡短介紹
s.homepage = 'https://github.com/jinyuisme/test' #主頁
s.license = { :type => 'MIT', :file => 'LICENSE' } #開源協(xié)議
s.author = { 'jinyuisme' => 'EX-ZHANGJINYU001@pingan.com.cn' } #作者信息
s.source = { :git => 'https://github.com/jinyuisme/test.git', :tag => s.version.to_s } #git地址
s.ios.deployment_target = '8.0' #最低支持的ios版本
s.source_files = 'test/Classes/**/*' #開源類
s.dependency 'AFNetworking', '~> 2.3' ? ?#pod第三方依賴
s.requires_arc =true ? ? #是否要求ARC
end?
補充1:s.source_files常見寫法
"Directory1/*"
"Directory1/Directory2/*.{h,m}"
"Directory1/**/*.h"
“*” 表示匹配所有文件
“*.{h,m}” 表示匹配所有以.h和.m結(jié)尾的文件
“**” 表示匹配所有子目錄
補充2:s.source常見寫法
s.source = { :git=>'https://github.com/jinyuisme/test.git', :commit=>"68defea"}
s.source = { :git=>'https://github.com/jinyuisme/test.git', :tag=>0.1.0}
s.source = { :git=>'https://github.com/jinyuisme/test.git', :tag=>s.version.to_s }
commit => "68defea" 表示將這個Pod版本與Git倉庫中某個commit綁定
tag => 0.1.0 表示將這個Pod版本與Git倉庫中某個版本的comit綁定
tag => s.version.to_s 表示將這個Pod版本與Git倉庫中相同版本的comit綁定
5.驗證podspec 有效性
編輯好.podspec文件之后最好先驗證下有效性
pod spec lint test.podspec
驗證過程中:
-> test (0.1.0)
驗證成功:
test.podspec passed validation.
驗證失敗:(驗證失敗有很多種情況,以下進行列舉)
1.只有警告
[!] The spec did not pass validation, due to 1 warning (but you can use `--allow-warnings` to ignore it). ? #這個最簡單,也是最好處理,直接在后面拼接--allow-warnings即可,例:
pod spec lint test.podspec?--allow-warnings
2.有一些錯誤我們不知道原因,可以在后面添加--verbose來查看
pod spec lint test.podspec?--verbose
如果出現(xiàn)如下錯誤,說明第三方庫中包含了.a靜態(tài)庫造成的。雖然并不影響Pod的使用,但是驗證是無法通過的。可以通過 --use-libraries 來讓驗證通過。
pod spec lint test.podspec --verbose?--use-libraries
這種情況下使用 --use-libraries 雖然不會出現(xiàn)錯誤(error),但是有時候會帶來一些警告(waring),警告同樣是無法通過驗證的。這時可以用 --allow-warnings 來允許警告。
pod spec lint test.podspec --verbose?--use-libraries --allow-warnings
6.發(fā)布到CocoaPods
我們使用 Trunk 服務(wù)可以方便的發(fā)布自己的Pod。CocoaPods Trunk 服務(wù)的引入,解決了很多類似的問題。每次使用 Trunk 服務(wù)發(fā)布 Pod 時都會通過 $ pod lint 驗證 .podspec 是否有效。要想使用 Trunk 服務(wù),首先需要使用如下命令注冊自己的電腦。這很簡單,只要你指明你的郵箱地址(spec文件中的)和名稱即可。CocoaPods 會給你填寫的郵箱發(fā)送驗證郵件,點擊郵件中的鏈接就可通過驗證。
pod trunk register 872455130@qq.com "jinyuisme" ??
# pod trunk register [github 郵箱] ["github用戶名"],點擊郵箱中的鏈接點擊之后跳轉(zhuǎn)如下頁面表示注冊成功
然后就可以發(fā)布你的 Pod 了。
pod trunk push test.podspec
發(fā)布時會驗證 Pod 的有效性,如果你在手動驗證 Pod 時使用了 --use-libraries 或 --allow-warnings 等修飾符,那么發(fā)布的時候也應(yīng)該使用相同的字段修飾,否則出現(xiàn)相同的報錯。
pod trunk push test.podspec?--use-libraries --allow-warnings
發(fā)布成功之后我們就可以使用我們添加的pod了。
由于 pod search 是搜索的本地“~/.cocoapods”,所以在其他設(shè)備上可能無法搜到。這時只需要執(zhí)行 pod install 更新下 pod 倉庫即可(不要加 --no-repo-update)。
7.更新pod版本
當(dāng)需要更新 Pod 版本的時候,修改 .podspec 中的 s.version 為更高的版本號,并修改 s.source 中對應(yīng)的 Git 版本。提交到Git,并打上對應(yīng)tag。然后再次執(zhí)行pod trunk push test.podspec將新的 .podspec 發(fā)布到 CocoaPods。更新完成!
為了更新更加方便,版本控制更加清晰,s.source 建議采用如下寫法:
s.source = { :git => 'https://github.com/jinyuisme/test.git', :tag => s.version.to_s
這樣寫將 Git 的版本與 CocoaPods 的版本進行了綁定。每次提交后再給本次提交打上 tag 就完成了更新。而且在 Git 中就可以清晰的看到哪次提交對應(yīng)的哪個 CocoaPods 版本。