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

一沸移、概述

Cocoapods是當(dāng)前iOS開(kāi)發(fā)最流行的版本依賴工具,開(kāi)發(fā)者使用Cocoapods進(jìn)行項(xiàng)目的依賴管理會(huì)為開(kāi)發(fā)節(jié)省不少時(shí)間。相信大家都嘗試過(guò)通過(guò)Cocoapods管理自己的項(xiàng)目,但如何將自己開(kāi)發(fā)的代碼發(fā)布到Cocoapods上讓別人也可以搜索使用呢小腊?下面就將介紹trunk方式接入的方法,以及在過(guò)程中可能遇到的坑久窟。

二秩冈、注冊(cè)

接入的第一步就是要注冊(cè)trunk,在注冊(cè)trunk之前需要確認(rèn)當(dāng)前的CocoaPods版本必須在0.33以上斥扛。若低于該版本請(qǐng)打開(kāi)Terminal使用ruby的gem命令更新pod:

sudo gem install cocoapods

若OSX版本在10.11以上請(qǐng)使用以下安裝命令

sudo gem install -n /usr/local/bin cocoapods

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

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

其中郵箱是最重要的入问,因?yàn)樽?cè)之后pod會(huì)往你的郵箱發(fā)一封激活郵件,所以郵箱名就當(dāng)相當(dāng)于你的trunkID了稀颁。至于用戶名個(gè)人感覺(jué)寫(xiě)不寫(xiě)都不太有所謂芬失,--description參數(shù)是cocoapods推薦添加的,若以后你在別的設(shè)備上登錄了trunk方便判斷終端信息匾灶,也是一個(gè)可有可無(wú)的參數(shù)棱烂。點(diǎn)擊郵箱中的注冊(cè)鏈接,使用下列命令就可以向trunk服務(wù)器查詢到自己的注冊(cè)信息阶女。

pod trunk me

輸出下列信息即表示注冊(cè)成功:


注冊(cè)信息

三颊糜、配置podspec

3.1添加podspec文件

podspec文件就相當(dāng)于你的項(xiàng)目簡(jiǎn)介,可以讓cocoapods搜索引擎知道作者名秃踩、項(xiàng)目概述衬鱼、版本號(hào)、源代碼地址憔杨、依賴庫(kù)等信息馁启,因此cocoapods上的每個(gè)項(xiàng)目都會(huì)有一個(gè)podspec描述文件。cocoapodsGithub上通過(guò)一個(gè)repo來(lái)管理所有支持cocoapods的代碼https://github.com/CocoaPods/Specs芍秆。
如何創(chuàng)建一個(gè)podspec文件呢?我們可以通過(guò):

pod spec create <name>

來(lái)創(chuàng)建一個(gè)podspec文件翠勉,但官方的spec文件寫(xiě)的非常冗余妖啥,看起來(lái)不夠簡(jiǎn)明,如果是第一次寫(xiě)podspec官方的spec文件還是可以去看一下的对碌,畢竟文檔注釋比較詳細(xì)荆虱。最終還是建議參考github上各種開(kāi)源庫(kù)上的podspec文件來(lái)進(jìn)行自身項(xiàng)目的podspec文件配置,在此分享出自己編輯的podspec文件來(lái)供大家學(xué)習(xí)交流。

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

接下來(lái)對(duì)幾個(gè)參數(shù)進(jìn)行簡(jiǎn)要的說(shuō)明:

s.name 就是你的項(xiàng)目名了,通過(guò)之后可以使用pod search命令搜索到怀读;
s.version 項(xiàng)目當(dāng)前的版本號(hào)诉位;
s.summary 項(xiàng)目的概要描述;
s.description 項(xiàng)目的詳細(xì)描述菜枷;
s.license 許可文件苍糠,這個(gè)是cocoapods必須要求若沒(méi)有會(huì)無(wú)法通過(guò)驗(yàn)證;
s.source 項(xiàng)目源代碼位置啤誊,一般就是一個(gè)github地址岳瞭;
s.default_subspec 項(xiàng)目默認(rèn)加載的子包,由于我的項(xiàng)目是由多個(gè)包構(gòu)成的所以我會(huì)添加這項(xiàng)蚊锹,若項(xiàng)目只有一個(gè)包則不用填寫(xiě)這個(gè)參數(shù)瞳筏;

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

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

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

3.2 本地檢查

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

pod lib lint --verbose

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

檢查成功

那么恭喜你苍柏,我們可以進(jìn)行下一步了。

3.3 通過(guò)Trunk push podspec文件

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

git add .
git commit -m "版本內(nèi)容"
git push origin master

2.為你上傳上去的代碼打上tag標(biāo)簽楼咳,使得cocoapods可以更精確的查找到你的版本

git tag 'tagNum'
git push --tags

所有準(zhǔn)備工作完成之后熄捍,就開(kāi)始最核心的工作trunk push了

pod trunk push yourProjectName.podsepc --verbose  文件名稱請(qǐng)修改成自己的podspec名稱

上面的代碼做了三件事:
1、驗(yàn)證你的podspec文件是否合法,在trunk方式之前我們已經(jīng)用了“pod lib lint”命令進(jìn)行驗(yàn)證母怜;
2余耽、上傳podspec文件到trunk服務(wù)器,最終還是會(huì)上傳到https://github.com/CocoaPods/Specs中;
3苹熏、將你上傳的podspec文件轉(zhuǎn)成json格式文件碟贾。

通過(guò)本地pod lib lint的文件一般而言都不會(huì)出什么問(wèn)題币喧,發(fā)生概率最大的問(wèn)題可能就是由于網(wǎng)不給力,導(dǎo)致連接GitHub困難袱耽。上傳成功之后杀餐,就可以使用
pod search 命令來(lái)搜索自己的項(xiàng)目了。

如果pod search不到自己的項(xiàng)目朱巨,就需要再手動(dòng)pod setup一次來(lái)同步自己本地的spec repo史翘,這個(gè)過(guò)程總是漫長(zhǎng)且?guī)в型纯嗟模越ㄗh更新的時(shí)候掛著VPN蔬崩。

四恶座、后續(xù)項(xiàng)目的升級(jí)

當(dāng)你的項(xiàng)目做出了修改之后,當(dāng)然希望cocoapods中的版本也進(jìn)行更新沥阳。此時(shí)就需要更新podspec描述文件了跨琳,將podspec文件改成符合你當(dāng)前版本的需求之后。還需要給你GitHub上的版本打上tag桐罕,而且一定要和podspec中的s.version一致脉让。

順帶一提的是podspec是沒(méi)有“后悔藥”功能的,你一旦發(fā)現(xiàn)你當(dāng)前版本與podspec描述文件填寫(xiě)不符功炮,你是無(wú)法修改當(dāng)前版本的podspec的只能提到下個(gè)版本中進(jìn)行修改,這也是一個(gè)比較坑的地方溅潜,因此在填寫(xiě)podspec文件的時(shí)候務(wù)必要小心謹(jǐn)慎才是。

五薪伏、參考文檔

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末滚澜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嫁怀,更是在濱河造成了極大的恐慌设捐,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件塘淑,死亡現(xiàn)場(chǎng)離奇詭異萝招,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)存捺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)槐沼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人捌治,你說(shuō)我怎么就攤上這事岗钩。” “怎么了肖油?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵凹嘲,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我构韵,道長(zhǎng)周蹭,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任疲恢,我火速辦了婚禮凶朗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘显拳。我一直安慰自己棚愤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布杂数。 她就那樣靜靜地躺著宛畦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪揍移。 梳的紋絲不亂的頭發(fā)上碉咆,一...
    開(kāi)封第一講書(shū)人閱讀 52,337評(píng)論 1 310
  • 那天妒穴,我揣著相機(jī)與錄音,去河邊找鬼。 笑死幌羞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的爆存。 我是一名探鬼主播株扛,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼诉探!你這毒婦竟也來(lái)了日熬?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤肾胯,失蹤者是張志新(化名)和其女友劉穎竖席,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體阳液,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡怕敬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了帘皿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片东跪。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鹰溜,靈堂內(nèi)的尸體忽然破棺而出虽填,到底是詐尸還是另有隱情,我是刑警寧澤曹动,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布斋日,位于F島的核電站,受9級(jí)特大地震影響墓陈,放射性物質(zhì)發(fā)生泄漏恶守。R本人自食惡果不足惜第献,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望兔港。 院中可真熱鬧庸毫,春花似錦、人聲如沸衫樊。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)科侈。三九已至载佳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間臀栈,已是汗流浹背蔫慧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挂脑,地道東北人藕漱。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像崭闲,于是被迫代替她去往敵國(guó)和親肋联。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

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