iOS-將程式碼釋出到CocoaPods(trunk方式)

Doliant發表於2019-05-02

一、概述

Cocoapods是當前iOS開發最流行的版本依賴工具,開發者使用Cocoapods進行專案的依賴管理會為開發節省不少時間。相信大家都嘗試過通過Cocoapods管理自己的專案,但如何將自己開發的程式碼釋出到Cocoapods上讓別人也可以搜尋使用呢?下面就將介紹trunk方式接入的方法,以及在過程中可能遇到的坑。

二、註冊

接入的第一步就是要註冊trunk,在註冊trunk之前需要確認當前的CocoaPods版本必須在0.33以上。若低於該版本請開啟Terminal使用ruby的gem命令更新pod:

sudo gem install cocoapods
複製程式碼

若OSX版本在10.11以上請使用以下安裝命令

sudo gem install -n /usr/local/bin cocoapods
複製程式碼

版本更新結束之後我們開始註冊trunk:

pod trunk register <郵箱>  <'使用者名稱'> --description='macbook pro'
複製程式碼

其中郵箱是最重要的,因為註冊之後pod會往你的郵箱發一封啟用郵件,所以郵箱名就當相當於你的trunkID了。至於使用者名稱個人感覺寫不寫都不太有所謂,--description引數是cocoapods推薦新增的,若以後你在別的裝置上登入了trunk方便判斷終端資訊,也是一個可有可無的引數。點選郵箱中的註冊連結,使用下列命令就可以向trunk伺服器查詢到自己的註冊資訊。

pod trunk me
複製程式碼

輸出下列資訊即表示註冊成功:

註冊資訊

三、配置podspec

3.1新增podspec檔案

podspec檔案就相當於你的專案簡介,可以讓cocoapods搜尋引擎知道作者名、專案概述、版本號、原始碼地址、依賴庫等資訊,因此cocoapods上的每個專案都會有一個podspec描述檔案。cocoapodsGithub上通過一個repo來管理所有支援cocoapods的程式碼github.com/CocoaPods/S…。 如何建立一個podspec檔案呢?我們可以通過:

pod spec create <name>
複製程式碼

來建立一個podspec檔案,但官方的spec檔案寫的非常冗餘,看起來不夠簡明,如果是第一次寫podspec官方的spec檔案還是可以去看一下的,畢竟文件註釋比較詳細。最終還是建議參考github上各種開源庫上的podspec檔案來進行自身專案的podspec檔案配置,在此分享出自己編輯的podspec檔案來供大家學習交流。

Pod::Spec.new do |s|
s.name        = "ipaynowplugin"
s.version      = "1.7.3.42"
s.summary      = "ipaynowplugin SDK"
s.description  = <<-DESC
   Help developer to quickly intergrate variety of payment methods
DESC
s.homepage    = "http://www.ipaynow.cn"
s.license      = "MIT"
s.author      = { "Hstripe" => "huangrui@ipaynow.cn" }
s.platform    = :ios, '6.0'
s.source      = { :git => "https://github.com/Hstripe/libipaynow.git", :tag => s.version }
s.default_subspec = 'Core'
s.requires_arc = true
s.subspec 'Core' do |core|
core.source_files = "lib/*.h"
core.public_header_files = "lib/*.h"
core.vendored_libraries = "lib/*.a"
core.resource = "lib/*.bundle"
core.frameworks = "CoreGraphics", "CoreTelephony","QuartzCore","SystemConfiguration","Security","Foundation","UIKit"
core.ios.library = 'z', 'sqlite3.0','c++', 'stdc++'
core.xcconfig = { 'OTHER_LDFLAGS' => '-ObjC' }
end

s.subspec 'Alipay' do |ali|
ali.ios.vendored_frameworks = "lib/Channels/AliPayPlugin/AlipaySDK.framework"
ali.resource = "lib/Channels/AliPayPlugin/AlipaySDK.bundle"
ali.dependency "ipaynowplugin/Core"
ali.frameworks = "CoreMotion"
end

s.subspec 'Weixin' do |wx|
wx.ios.vendored_libraries = "lib/Channels/WechatPlugin/*.a"
wx.source_files = "lib/Channels/WechatPlugin/*.h"
wx.public_header_files = "lib/Channels/WechatPlugin/*.h"
wx.dependency "ipaynowplugin/Core"
end

s.subspec 'Unionpay' do |up|
up.vendored_libraries = 'lib/Channels/UPPayPlugin/*.a'
up.source_files = 'lib/Channels/UPPayPlugin/*.h'
up.dependency 'ipaynowplugin/Core'
end

s.subspec 'ApplePay' do |ap|
ap.source_files = 'lib/Channels/UPApplePay/*.h'
ap.public_header_files = 'lib/Channels/UPApplePay/*.h'
ap.vendored_libraries = 'lib/Channels/UPApplePay/*.a'
ap.dependency 'ipaynowplugin/Core'
ap.frameworks = "PassKit"
end
end
複製程式碼

接下來對幾個引數進行簡要的說明:

s.name 就是你的專案名了,通過之後可以使用pod search命令搜尋到;
s.version 專案當前的版本號;
s.summary 專案的概要描述;
s.description 專案的詳細描述;
s.license 許可檔案,這個是cocoapods必須要求若沒有會無法通過驗證;
s.source 專案原始碼位置,一般就是一個github地址;
s.default_subspec 專案預設載入的子包,由於我的專案是由多個包構成的所以我會新增這項,若專案只有一個包則不用填寫這個引數;
複製程式碼

以下這幾個引數比較重要:

core.source_files 專案主要檔案;
core.public_header_files 暴露出的標頭檔案;
core.vendored_libraries  專案封的靜態庫(根據專案型別:開源、閉源,沒有可不填);
core.resource  專案用的資原始檔(圖片之類的);
core.frameworks 依賴的系統的framework框架 ;
core.ios.library 依賴的系統的lib庫檔案;
複製程式碼

完成以上引數配置之後,接著進行下一步

3.2 本地檢查

完成podspec描述檔案的引數配置之後,最好是先進行podspec檔案的本地檢查,命令如下:

pod lib lint --verbose
複製程式碼

verbose的作用是輸出過程中的除錯資訊方便我們查錯,若有錯誤的話根據Build Failed中的錯誤資訊進行podspec內容的修改。 如果輸入終端執行完之後,顯示的是如下資訊:

檢查成功
那麼恭喜你,我們可以進行下一步了。

3.3 通過Trunk push podspec檔案

1.在進行trunk push之前,首先確保你已經把你的專案檔案上傳到Github上了,若還沒上傳原始碼,可以用終端cd到專案資料夾執行一下操作上傳程式碼到Github

git add .
git commit -m "版本內容"
git push origin master
複製程式碼

2.為你上傳上去的程式碼打上tag標籤,使得cocoapods可以更精確的查詢到你的版本

git tag 'tagNum'
git push --tags
複製程式碼

所有準備工作完成之後,就開始最核心的工作trunk push了

pod trunk push yourProjectName.podsepc --verbose  檔名稱請修改成自己的podspec名稱
複製程式碼

上面的程式碼做了三件事: 1、驗證你的podspec檔案是否合法,在trunk方式之前我們已經用了“pod lib lint”命令進行驗證; 2、上傳podspec檔案到trunk伺服器,最終還是會上傳到https://github.com/CocoaPods/Specs中; 3、將你上傳的podspec檔案轉成json格式檔案。

通過本地pod lib lint的檔案一般而言都不會出什麼問題,發生概率最大的問題可能就是由於網不給力,導致連線GitHub困難。上傳成功之後,就可以使用 pod search 命令來搜尋自己的專案了。

如果pod search不到自己的專案,就需要再手動pod setup一次來同步自己本地的spec repo,這個過程總是漫長且帶有痛苦的,所以建議更新的時候掛著VPN。

四、後續專案的升級

當你的專案做出了修改之後,當然希望cocoapods中的版本也進行更新。此時就需要更新podspec描述檔案了,將podspec檔案改成符合你當前版本的需求之後。還需要給你GitHub上的版本打上tag,而且一定要和podspec中的s.version一致。

順帶一提的是podspec是沒有“後悔藥”功能的,你一旦發現你當前版本與podspec描述檔案填寫不符,你是無法修改當前版本的podspec的只能提到下個版本中進行修改,這也是一個比較坑的地方,因此在填寫podspec檔案的時候務必要小心謹慎才是。

五、參考文件

www.cnblogs.com/wengzilin/p…

www.jianshu.com/p/0b516ee65…

相關文章