一、概述
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
描述文件。cocoapods
在Github
上通過一個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/