一、創建自己的github倉庫
CocoaPods都托管在github上(官方鏈接為: https://github.com/CocoaPods ),所有的Pods依賴庫也都依賴github,因此第一步我們需要創建一個屬于自己的github倉庫。倉庫創建界面如下圖:
上圖中標了序號的共6處,對應的說明如下:
1、Repository name
倉庫名稱,這里寫成HTQRCode,必填的;
2、Description
倉庫的描述信息,可選的;
3、倉庫的公開性
這里只能選Public,一個是因為Private是要money的,再一個Private別人看不到還共享個毛;
4、是否創建一個默認的README文件
一個完整地倉庫,都需要README說明文檔,建議選上。當然不嫌麻煩的話你也可以后面再手動創建一個;
5、是否添加.gitignore文件
.gitignore文件里面記錄了若干中文件類型,凡是該文件包含的文件類型,git都不會將其納入到版本管理中。是否選擇看個人需要;
6、license類型
正規的倉庫都應該有一個license文件,Pods依賴庫對這個文件的要求更嚴,是必須要有的。因此最好在這里讓github創建一個,也可以自己后續再創建。我使用的license類型是MIT。
上面的各項都填寫完畢后,點擊Create repository按鈕即可,創建成功地界面如圖:
到這,倉庫創建過程就結束了。
二、clone倉庫到本地
為了便于向倉庫中刪減內容,需要先將倉庫clone到本地,操作方式有多種,推薦使用命令行:
$ git clone https://github.com/TeaseTian/HTQRCode.git
操作完成后,github上對應的文件都會拷貝到本地,目錄結構為:
github上倉庫中的.gitignore文件是以.開頭的隱藏文件,因此這里只能看到兩個。
后續我們的所有文件增、刪、改都在這個目錄下進行。
三、向本地git倉庫中添加創建Pods依賴庫所需文件
創建.podspec
首先在你的項目中使用如下命令創建名為 HTQRCode 的 HTQRCode.podspec(當然你也可以使用vim創建,只是沒有默認文本而已)
$ pod spec create HTQRCode
編輯.podspec
創建好的 .podspec 包含大量的注釋說明了每個參數的含義及用法。如果想詳細了解可以仔細閱讀。這里只介紹幾個常用的。
Pod::Spec.new do |s|
s.name = "HTQRCode"
s.version = "1.0.0"
s.summary = "二維碼生成和掃描"
s.description = <<-DESC
二維碼生成和掃描,使用
DESC
s.homepage = "https://github.com/TeaseTian/HTQRCode"
s.license = { :type => "MIT", :file => "LICENSE" }
s.author = { "TeaseTian" => "330972860@qq.com" }
s.platform = :ios, "7.0"
s.source = { :git => "https://github.com/TeaseTian/HTQRCode.git", :tag => s.version }
s.source_files = "HTQRCode/*.{h,m}"
s.resources = "HTQRCode/*.png"
# s.frameworks = "SomeFramework", "AnotherFramework"
s.requires_arc = true
s.dependency "ZXingObjC", "3.1.0"
s.dependency "Masonry"
end
s.name:名稱,pod search 搜索的關鍵詞
s.version:版本
s.summary:簡介,pod search 搜索的關鍵詞
s.homepage:主頁地址,例如Github地址
s.license:許可證
s.author:作者
s.social_media_url:社交網址
s.platform:平臺
s.source:Git倉庫地址,例如在Github地址后邊加上 .git 就是Git倉庫地址,常見寫法如下
s.source_files:需要包含的源文件,常見的寫法如下
s.resources:需要包含的圖片等資源文件
s.dependency:依賴庫,不能依賴未發布的庫
s.dependency:依賴庫,如有多個可以這樣寫
s.requires_arc:是否要求ARC
s.source_files 常見寫法
"Directory1/*" 表示匹配所有文件
"Directory1/Directory2/*.{h,m}" 表示匹配所有以.h和.m結尾的文件
"Directory1/**/*.h" 表示匹配所有子目錄
s.source 常見寫法
s.source = { :git => "https://github.com/TeaseTian/HTQRCode.git", :commit => "68defea" }
s.source = { :git => "https://github.com/TeaseTian/HTQRCode.git", :tag => 1.0.0 }
s.source = { :git => "https://github.com/TeaseTian/HTQRCode.git", :tag => s.version }
commit => "68defea" 表示將這個Pod版本與Git倉庫中某個commit綁定
tag => 1.0.0 表示將這個Pod版本與Git倉庫中某個版本的comit綁定
tag => s.version 表示將這個Pod版本與Git倉庫中相同版本的comit綁定
按照上述規則編輯完成就制作好了 .podspec(最好使用vim進行編輯)。
上傳到Git
將包含配置好的 .podspec 的項目提交 Git,并給這次提交打上 tag
$ git add -A && git commit -m "Release 1.0.0."
$ git tag '1.0.0'
$ git push --tags
$ git push origin master
這時就可以在其他項目中使用 CocoaPods 引入你配置好的 Pod 了。
pod 'HTQRCode', :git => 'https://github.com/TeaseTian/HTQRCode.git', :tag => '1.0.0'
當然,在給其他項目使用前最好先*驗證.podspec的有效性。
驗證.podspec
編輯好后最好先驗證 .podspec 是否有有效
$ pod spec lint
驗證過程中:
-> HTQRCode
驗證成功后:
HTQRCode.podspec passed validation.
驗證失敗后:
[!] The spec did not pass validation, due to 1 error.
驗證 .podspec 會先測試本地 .podspec 文件是否存在語法錯誤。測試成功再根據 .podspec 文件找到遠端倉庫對應的版本克隆到本地并進行配置。最后測試文件是否能夠編譯成功。
.podspec驗證失敗錯誤排查
語法錯誤
如果是因為語法錯誤,驗證失敗后會給出錯誤的準確定位
[!] Invalid `HTQRCode.podspec` file: no .<digit> floating literal anymore; put 0 before dot
s.version = “1.0.0”
^
HTQRCode.podspec:5: syntax error, unexpected tFLOAT, expecting '('
s.version = “1.0.0”
^
標記“^”的地方即為有語法錯誤的地方。
上述錯誤是因為使用“文本編輯”進行編輯造成的。使用文本編輯有時候英文""引號會自動變成中文“”引號。
[!] Your Podfile has had smart quotes sanitised. To avoid issues in the future, you should not use TextEdit for editing it. If you are not using TextEdit, you should turn off smart quotes in your editor of choice.
使用 vim 將其改為英文的""引號即可。
依賴錯誤
但是,有些非語法錯誤是不會給出錯誤原因的。這個時候可以使用“--verbose”來查看詳細的驗證過程來幫助定位錯誤。
pod spec lint HTQRCode.podspec --verbose
如下錯誤通過 --verbose 就可以找到原因。
-> HTQRCode (1.0.0)
- ERROR | [iOS] Encountered an unknown error (The 'Pods' target has transitive dependencies that include static binaries: (/private/var/folders/jz/b_m3k7ln47524cm__h3__mk00000gn/T/CocoaPods/Lint/Pods/BPushSDK/LibBPush/libBPush.a)) during validation.
這個錯誤是因為依賴庫(s.dependency)包含了.a靜態庫造成的。雖然這并不影響Pod的使用,但是驗證是無法通過的。可以通過 --use-libraries 來讓驗證通過。
pod spec lint HTQRCode.podspec --verbose --use-libraries
這種情況下使用 --use-libraries 雖然不會出現錯誤(error),但是有時候會帶來一些警告(waring),警告同樣是無法通過驗證的。這時可以用 --allow-warnings 來允許警告。
pod spec lint HTQRCode.podspec --verbose --use-libraries --allow-warnings
安裝錯誤
如果在其他項目 pod install 的過程中,出現包含“undefined method end_with?' for nil”字樣的報錯。進入“~/.cocoapods/repos”目錄,刪除“master”,并將 master-1 改為 master 即可。 如果出現如下錯誤,而你的驗證可以通過,那么一般更新下版本號就可以解決。
[!] Unable to find a specification for 'HTQRCode'.`
再次驗證
如果錯誤發生在 .podspec 中。當修改完時,不需要再次提交就可以直接驗證。如果錯誤發生在代碼中,則需要再次提交才能驗證。
發布到CocoaPods
你可以用 .podspec 文件來方便的管理內部代碼,當然,也可以發布自己的 Pod 供其他開發者使用。
CocoaPods 0.33中加入了 Trunk 服務,使用 Trunk 服務可以方便的發布自己的Pod。雖然一開始使用 GitHub Pull Requests 來整理所有公共 pods 效果很好。但是,隨著 Pod 數量的增加,這個工作對于 spec 維護人員 Keith Smiley 來說變得十分繁雜。甚至一些沒有通過 $ pod lint 的 spec 也被提交上來,造成 repo 無法 build。CocoaPods Trunk 服務的引入,解決了很多類似的問題。每次使用 Trunk 服務發布 Pod 時都會通過 $ pod lint 驗證 .podspec 是否有效。要想使用 Trunk 服務,首先需要使用如下命令注冊自己的電腦。這很簡單,只要你指明你的郵箱地址(spec文件中的)和名稱即可。CocoaPods 會給你填寫的郵箱發送驗證郵件,點擊郵件中的鏈接就可通過驗證。
pod trunk register 330972860@qq.com "TeaseTian"
然后就可以發布你的 Pod 了。
pod trunk push HTQRCode.podspec
發布時會驗證 Pod 的有效性,如果你在手動驗證 Pod 時使用了 --use-libraries 或 --allow-warnings 等修飾符,那么發布的時候也應該使用相同的字段修飾,否則出現相同的報錯。
pod trunk push HTQRCode.podspec --use-libraries --allow-warnings
發布成功后,就可以使用 pod search 搜索到你的 Pod 了!
-> HTQRCode (1.0.0)
integrate APNs rapidly
pod 'HTQRCode', '~> 1.0.0'
- Homepage: https://github.com/TeaseTian/HTQRCode
- Source: https://github.com/TeaseTian/HTQRCode.git
- Versions: 1.0.0 [master repo]
由于 pod search 是搜索的本地“~/.cocoapods”,所以在其他設備上可能無法搜到。這時只需要執行 pod install
更新下 pod 倉庫即可(不要加 --no-repo-update)。
版本升級
當需要更新 Pod 版本的時候,修改 .podspec 中的 s.version 為更高的版本號,并修改 s.source 中對應的 Git 版本。提交到Git,并打上對應tag。然后再次執行pod trunk push HTQRCode.podspec
將新的 .podspec 發布到 CocoaPods。更新完成!
為了更新更加方便,版本控制更加清晰,s.source 建議采用如下寫法:
s.source = { :git => "https://github.com/TeaseTian/HTQRCode.git", :tag => s.version }
這樣寫將 Git 的版本與 CocoaPods 的版本進行了綁定。每次提交后再給本次提交打上 tag 就完成了更新。而且在 Git 中就可以清晰的看到哪次提交對應的哪個 CocoaPods 版本。如果與 commit 綁定,則要通過兩次提交才能完成更新,第一次先提交修改代碼,第二次將上一次 commit id 更新到 s.source 然后再次提交。如果直接與固定 tag 綁定,則每次還都要修改 s.source。如果你的 Pod 是私有庫,那么 s.source 其實是無用的。因為在 Podfile 中已經指明了地址和版本(如下)。這時 s.source 可以隨便填寫,但最好還是按照上述規則以便以后發布。
pod 'HTQRCode', :git => 'https://github.com/TeaseTian/HTQRCode.git', :tag => 1.0.0
協同工作
當需要其他人來共同維護你的代碼,需要提供權限
pod trunk add-owner CLRollingCycleView chrislian@163.com
總結制作pod的步驟
1.從自己的github上創建項目,clone
到本地
git clone https://github.com/TeaseTian/HTQRCode.git
2.創建創建podspec
文件和相對應的項目
pod spec create HTQRCode
Pod::Spec.new do |s|
s.name = "HTQRCode"
s.version = "1.0.0"
s.summary = "二維碼生成和掃描"
s.description = <<-DESC
二維碼生成和掃描,使用
DESC
s.homepage = "https://github.com/TeaseTian/HTQRCode"
s.license = { :type => "MIT", :file => "LICENSE" }
s.author = { "TeaseTian" => "330972860@qq.com" }
s.platform = :ios, "7.0"
s.source = { :git => "https://github.com/TeaseTian/HTQRCode.git", :tag => s.version }
s.source_files = "HTQRCode/*.{h,m}"
s.resources = "HTQRCode/*.png"
# s.frameworks = "SomeFramework", "AnotherFramework"
s.requires_arc = true
s.dependency "ZXingObjC", "3.1.0"
s.dependency "Masonry"
end
3.推送的遠程倉庫,校驗podspec
文件
git add -A && git commit -m "Release 1.0.0."
git tag '1.0.0'
git push --tags
git push origin master
pod spec lint
4.使用trunk
發布到CocoaPods(第一次需要register)
pod trunk register 330972860@qq.com "TeaseTian"
pod trunk push HTQRCode.podspec