iOS-將代碼發(fā)布到CocoaPods(trunk方式)

一、概述

Cocoapods是當前iOS開發(fā)最流行的版本依賴工具,開發(fā)者使用Cocoapods進行項目的依賴管理會為開發(fā)節(jié)省不少時間。相信大家都嘗試過通過Cocoapods管理自己的項目,但如何將自己開發(fā)的代碼發(fā)布到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

版本更新結(jié)束之后我們開始注冊trunk:

pod trunk register <郵箱>  <'用戶名'> --description='macbook pro'

其中郵箱是最重要的,因為注冊之后pod會往你的郵箱發(fā)一封激活郵件,所以郵箱名就當相當于你的trunkID了。至于用戶名個人感覺寫不寫都不太有所謂,--description參數(shù)是cocoapods推薦添加的,若以后你在別的設(shè)備上登錄了trunk方便判斷終端信息,也是一個可有可無的參數(shù)。點擊郵箱中的注冊鏈接,使用下列命令就可以向trunk服務器查詢到自己的注冊信息。

pod trunk me

輸出下列信息即表示注冊成功:


注冊信息

三、配置podspec

3.1添加podspec文件

podspec文件就相當于你的項目簡介,可以讓cocoapods搜索引擎知道作者名、項目概述、版本號、源代碼地址、依賴庫等信息,因此cocoapods上的每個項目都會有一個podspec描述文件。cocoapodsGithub上通過一個repo來管理所有支持cocoapods的代碼https://github.com/CocoaPods/Specs
如何創(chuàng)建一個podspec文件呢?我們可以通過:

pod spec create <name>

來創(chuàng)建一個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

接下來對幾個參數(shù)進行簡要的說明:

s.name 就是你的項目名了,通過之后可以使用pod search命令搜索到;
s.version 項目當前的版本號;
s.summary 項目的概要描述;
s.description 項目的詳細描述;
s.license 許可文件,這個是cocoapods必須要求若沒有會無法通過驗證;
s.source 項目源代碼位置,一般就是一個github地址;
s.default_subspec 項目默認加載的子包,由于我的項目是由多個包構(gòu)成的所以我會添加這項,若項目只有一個包則不用填寫這個參數(shù);

以下這幾個參數(shù)比較重要:

core.source_files 項目主要文件;
core.public_header_files 暴露出的頭文件;
core.vendored_libraries  項目封的靜態(tài)庫(根據(jù)項目類型:開源、閉源,沒有可不填);
core.resource  項目用的資源文件(圖片之類的);
core.frameworks 依賴的系統(tǒng)的framework框架 ;
core.ios.library 依賴的系統(tǒng)的lib庫文件;

完成以上參數(shù)配置之后,接著進行下一步

3.2 本地檢查

完成podspec描述文件的參數(shù)配置之后,最好是先進行podspec文件的本地檢查,命令如下:

pod lib lint --verbose

verbose的作用是輸出過程中的調(diào)試信息方便我們查錯,若有錯誤的話根據(jù)Build Failed中的錯誤信息進行podspec內(nèi)容的修改。
如果輸入終端執(zhí)行完之后,顯示的是如下信息:

檢查成功

那么恭喜你,我們可以進行下一步了。

3.3 通過Trunk push podspec文件

1.在進行trunk push之前,首先確保你已經(jīng)把你的項目文件上傳到Github上了,若還沒上傳源碼,可以用終端cd到項目文件夾執(zhí)行一下操作上傳代碼到Github

git add .
git commit -m "版本內(nèi)容"
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方式之前我們已經(jīng)用了“pod lib lint”命令進行驗證;
2、上傳podspec文件到trunk服務器,最終還是會上傳到https://github.com/CocoaPods/Specs中;
3、將你上傳的podspec文件轉(zhuǎn)成json格式文件。

通過本地pod lib lint的文件一般而言都不會出什么問題,發(fā)生概率最大的問題可能就是由于網(wǎng)不給力,導致連接GitHub困難。上傳成功之后,就可以使用
pod search 命令來搜索自己的項目了。

如果pod search不到自己的項目,就需要再手動pod setup一次來同步自己本地的spec repo,這個過程總是漫長且?guī)в型纯嗟模越ㄗh更新的時候掛著VPN。

四、后續(xù)項目的升級

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

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

五、參考文檔

http://www.cnblogs.com/wengzilin/p/4742530.html
http://www.lxweimin.com/p/0b516ee6576f/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容