第一部分:CocoaPods 的使用
需求
在 iOS 開發(fā)過程中,當(dāng)你需要使用必要的三方庫時(shí)沃饶,是否被各種庫搞得筋疲力盡酥夭?
當(dāng)你需要使用三方庫時(shí),你不僅需要手動(dòng)下載庫搅轿,還需要為該庫添加可能依賴的系統(tǒng)庫病涨;在庫需要更新時(shí),你依然需要重復(fù)上述操作璧坟,并且當(dāng)你想要?jiǎng)h除一些不再需要的三方庫時(shí)既穆,你還需要連同依賴的系統(tǒng)一并刪除,刪除的過程中特別注意其他庫所依賴的部分雀鹃』霉ぃ總之,手動(dòng)管理庫的過程相當(dāng)?shù)姆爆嵍秩菀壮鲥e(cuò)黎茎。那么囊颅,有沒有相關(guān)的工具幫我們完成這些繁瑣的是呢?這就要提到 iOS 程序員需要掌握的必備工具 - CoCoaPods。無論你是新手還是老手踢代,這工具都是接下來經(jīng)常打交道的盲憎,所以,這里推薦新手們快速的掌握該工具的使用胳挎,因?yàn)樗軒湍闶∪ハ喈?dāng)多的麻煩饼疙。
CocoaPods簡介
CocoaPods 是庫管理工具,iOS 開發(fā)過程中會(huì)遇到兩個(gè)頭疼的問題 -- 依賴庫的重復(fù)性和三方庫的更新串远,使用 CocoaPods 管理工具幫你自動(dòng)完成上述工作宏多,而你所需要做的事情就是編寫一份文件,來指定需要的三方庫以及版本等信息澡罚,然后一句更新命令即可。另外絕大部分有名的開源庫肾请,都支持了 CocoaPods留搔,這也讓 iOS 開發(fā)人員避不開使用 CocoPods。當(dāng)然你也可以發(fā)布自己的庫到 CocoaPods 上铛铁,分享你的工具隔显。
想要了解更多的信息,可以查閱 官方指導(dǎo)文檔 饵逐。
安裝 CocoaPods
安裝 CocoaPods 需要 Ruby 環(huán)境括眠,幸運(yùn)的是,OS X 系統(tǒng)默認(rèn)安裝了 Ruby 環(huán)境倍权,你可以使用下面的命令來查看當(dāng)前的 Ruby 版本掷豺。
$ ruby -v
CocoaPods 要求 Ruby 一定版本的,一般大于 2.2.0 即可薄声,如果還不行当船,選擇更高的版本即可。如果你的 Mac 達(dá)到了要求默辨,那么使用下面的命令安裝即可德频。
$ gem install cocoapods
如果你的賬號(hào)在電腦上沒有權(quán)限,使用下面命令缩幸,并輸入電腦的密碼壹置。
$ sudo gem install cocoapods
如果順利安裝完成,執(zhí)行以下命令來進(jìn)行初始化表谊,它會(huì)下載服務(wù)器中所有的框架信息钞护,緩存到電腦本地。過程可能需要較長時(shí)間铃肯。
$ pod setup
如果順利患亿,你就可以跳到使用 CocoaPods 使用步驟。
安裝過程中可能出現(xiàn)的問題
- 執(zhí)行
gem install cocoapods
沒反應(yīng)
因?yàn)?Ruby 默認(rèn)的來源是 https://rubygems.org/
, 國內(nèi)訪問時(shí)如果沒有梯子時(shí)會(huì)非常困難,可以將源替換為國內(nèi)的鏡像服務(wù)器步藕。
執(zhí)行下面命令查看當(dāng)前使用的源惦界。
$ gem sources -l
將源替換為國內(nèi)鏡像服務(wù)器的源。先刪除再添加咙冗。
$ gem sources --remove https://rubygems.org/
$ gem sources -a https://gems.ruby-china.com/
- Ruby 版本過低
當(dāng)出現(xiàn)提示 active support requires Ruby version >=2.2.0
字樣時(shí)沾歪,你需要將電腦上 Ruby 環(huán)境的版本升級(jí)到 2.2 以上。關(guān)于升級(jí) Ruby雾消,你可以使用 RVM(Ruby Version Manager灾搏,Ruby版本管理器)。
$ curl -L get.rvm.io | bash -s stable
$ source ~/.bashrc
$ source ~/.bash_profile
升級(jí) Ruby
列出當(dāng)前可以使用的各個(gè)版本信息立润。
$ rvm list known rubies
安裝對(duì)應(yīng)的版本
$ rvm install x.x.x
更多的問題狂窑,請(qǐng)自行搜索網(wǎng)絡(luò)最新文章。
使用 CocoaPods 管理三方庫
我們先新建一個(gè)演示工程:cocoapodsDemo桑腮。
在終端使用 cd
命令進(jìn)入到該項(xiàng)目下泉哈,執(zhí)行下面命令來創(chuàng)建三方庫的配置文件 Podfile
。你也可以手動(dòng)創(chuàng)建破讨,但是名稱必須為 Podfile
丛晦。
$ pod init
使用 vim Podfile
命令進(jìn)入該文件,或者直接在項(xiàng)目結(jié)構(gòu)中查看提陶。
編輯 Podfile 文件烫沙,以
AFNetworking
,JSONKit
隙笆,Reachability
為例锌蓄,編輯后的內(nèi)容如下:Podfile更多的語法。
編輯完成保存并退出仲器,終端進(jìn)入到該項(xiàng)目目錄下煤率,使用下述命令完成三方庫的安裝。
進(jìn)入到項(xiàng)目目錄乏冀。
$ cd desktop/cocoapodsDemo
執(zhí)行 CocoaPods 安裝命令蝶糯。
$ pod install
出現(xiàn)以下提示,表示成功安裝辆沦。
注意昼捍,安裝完成之后,當(dāng)前項(xiàng)目
Project
不能正常運(yùn)行了肢扯,我們需要使用 CocoaPods 為我們創(chuàng)建的 workspace
來運(yùn)行項(xiàng)目妒茬。我們重新打開項(xiàng)目目錄。對(duì)比最初的目錄結(jié)構(gòu)蔚晨,這里已經(jīng)多出了四個(gè)文件乍钻,其中:
-
Podfile
是三方庫的配置文件 -
xxx.xcworkspace
是管理我們項(xiàng)目和所有依賴庫的workspace
-
Podfile.lock
是執(zhí)行安裝后的信息 -
Pods
存放了三方庫文件以及系統(tǒng)依賴庫
我們打開這里的 xxx.xcworkspace
肛循。項(xiàng)目結(jié)構(gòu)如下:
以后你就可以通過
xxx.xcworkspace
來運(yùn)行你的項(xiàng)目了,其他關(guān)于三方庫的部分都交給 CocoaPods 來管理吧银择。
Cocoapods 幫你做了什么呢多糠?
打開 cocoapodsDemo
項(xiàng)目的 Frameworks
,你可以找到一個(gè) libPods-xxx.a
文件浩考。
CocoaPods 通過文件
Podfile
中的三方庫信息下載你所需要的庫夹孔,并將這些庫編譯成一個(gè) .a
的靜態(tài)庫鏈接到你的項(xiàng)目,除此之外析孽,CocoaPods 幫你完成依賴庫的管理搭伤,它能夠去除三方庫的依賴庫的重復(fù)庫,在你刪除不需要的三方庫是袜瞬,同樣自動(dòng)刪除多余的依賴庫怜俐。
CocoaPods 將所有的第三方庫以 target
的方式組成一個(gè)名為Pods的工程里,我們的工程和第三方庫所在的工程 Pods 由一個(gè)新生成的 workspace
管理吞滞。
更多常用的 pod 命令
- 新增或刪除三方庫
在 Podfile
新增或刪除指定三方庫的配置信息佑菩。重新執(zhí)行下面命令。
$ pod install
- 搜索三方庫的信息
你可以使用 search
搜索一些三方庫的信息裁赠,你無需全匹配,模糊搜索即可赴精。
$ pod search AFNetworking
$ pod search SDWeb
注:search
命令只會(huì)使用本地所創(chuàng)建的索引進(jìn)行搜索佩捞,因此,你搜索到的最新庫可能并不是最新版本蕾哟。
- 更新框架 / 更新本地索引文件
當(dāng)你的 Podfile
文件中沒有為三方庫指定特定版本一忱,但后續(xù)又想將三方庫更新到最新,你可以使用 update
命令來更新本地索引并完成類似 install
的安裝效果谭确。
# 同步遠(yuǎn)程最新信息
$ pod update
# 只根據(jù)本地緩存更新到最新的版本
$ pod update --no-repo-update
- 更新指定庫
有時(shí)候你可能并不需要更新所有的三方庫帘营,這種情況經(jīng)常出現(xiàn),例如你的 Podfile
文件中只有部分庫指定了版本逐哈,你這時(shí)候使用 update
命令芬迄,默認(rèn)是會(huì)將所有未指定的三方庫都進(jìn)行了更新笆凌,如果三方庫出現(xiàn) api 更新或替換芳撒,你的項(xiàng)目將出現(xiàn)錯(cuò)誤問題。又或者你的網(wǎng)絡(luò)不穩(wěn)定利耍,你只想更新一個(gè)或指定的幾個(gè)庫肠骆,你需要下面的命令來進(jìn)行指定庫的更新算途。
$ pod update 三方庫 --verbose --no-repo-update
- 本地索引庫在哪里?
通過 shift + command + G
打開前往文件夾蚀腿,輸入
~/.cocoapods/repos/
找到 master/specs
文件夾嘴瓤,該文件夾下緩存了 CocoaPods 的所有的三方庫信息,有三層文件夾,分別是 0-f 廓脆,隨便點(diǎn)開某個(gè)三方庫的索引文件筛谚,你可以在這里看到該三方庫的歷史版本。
其中狞贱,文件
xxxx.podspec.json
中就是三方庫的更詳細(xì)的信息刻获,例如作者,當(dāng)前版本瞎嬉,介紹蝎毡,目錄結(jié)構(gòu),依賴庫等等氧枣。
由于 CocoaPods 在時(shí)刻更新沐兵,所以你的緩存并非最新,所以你可能需要更新本地的
repos
便监。使用下面命令來更新扎谎。
$ pod repo update
該命令會(huì)同步所有庫的最新本版信息,如果你只想關(guān)心指定的庫烧董,你可以使用下面命令毁靶。
pod repo update ~/.cocoapods/repos/***/庫名
如果指定更新依舊無法更新,但是你急需使用最新的庫逊移,你可以去官網(wǎng)git手動(dòng)去下載對(duì)應(yīng)的庫预吆,也可以從有的同事小伙伴那邊直接復(fù)制。
- 更多相關(guān)的命令
第二部分:讓自己的庫支持 CocoaPods
需求
我們想要將自己開發(fā)的工具組件給他人使用拐叉,通常將共享文件封裝成 framework,讓別人手動(dòng)導(dǎo)入到自己的項(xiàng)目中去扇商,這也是開放平臺(tái)的通常做法凤瘦。除此之外,我們還可以通過 Cocoapods 來分享自己的工具組件案铺,就像 AFNetworking
蔬芥、SDWebImage
一樣。
必要條件
- 項(xiàng)目代碼庫(如 git红且、碼云等)并發(fā)布了release坝茎。
-
podspec
配置文件 -
cocoapods
賬號(hào)
如果你已經(jīng)有了 Git 倉庫,你只需要在項(xiàng)目中創(chuàng)建并配置你的項(xiàng)目信息即可暇番,文件名為 yourProjectName.podspec
嗤放。該文件語法可以看 官網(wǎng)指導(dǎo) 。
其他部分你可以參考這篇文章 iOS 讓自己的框架支持cocoapods壁酬。
接下來的篇幅次酌,主要介紹的是從無到有的過程恨课,這部分的內(nèi)容節(jié)選自 iOS 組件化 中的內(nèi)容。關(guān)于組件化你可以通過上面的鏈接來了解更多岳服。
我們來創(chuàng)建一個(gè)關(guān)于網(wǎng)絡(luò)請(qǐng)求的功能組件 LLNetworking
剂公。
- 拉取模版
我們將創(chuàng)建在桌面上的一個(gè)名為 Demo
文件夾。通過終端進(jìn)入到該文件夾下吊宋,然后輸入命令:
$ pod lib create LLNetworking
這個(gè)命令會(huì)為了拉取 Pod 的 基礎(chǔ)模板纲辽。拉取之后,還會(huì)通過詢問的形式為你配置一些東西:
// 作用的平臺(tái)
What platform do you want to use?? [ iOS / macOS ]
> iOS
// 語言環(huán)境
What language do you want to use?? [ Swift / ObjC ]
> ObjC
// 是否需要一個(gè) demo 用來測試組件
Would you like to include a demo application with your library? [ Yes / No ]
> Yes
Which testing frameworks will you use? [ Specta / Kiwi / None ]
> None
Would you like to do view based testing? [ Yes / No ]
> Yes
// 組件中璃搜,文件的前綴
What is your class prefix?
> LL
確認(rèn)之后拖吼,系統(tǒng)會(huì)為你自動(dòng)配置項(xiàng)目,創(chuàng)建好的項(xiàng)目如下:
- Example 工程
項(xiàng)目文件目錄中存在一個(gè)名為 Example
的工程这吻,這個(gè)工程是你選擇 Would you like to include a demo application with your library?
中選擇 Yes
時(shí)為你添加的吊档,這個(gè)還是很有用的,在你開發(fā)過程中可以通過它來集成測試組件功能的正確性唾糯、完整性怠硼。 我們先打開這個(gè) Example
來看下:
這個(gè) Example
已經(jīng)為你的組件創(chuàng)建了索引文件 podspec
,并且集成了該組件移怯。我們來看下 Example
的 Podfile
的內(nèi)容:
use_frameworks!
platform :ios, '8.0'
target 'LLNetworking_Example' do
pod 'LLNetworking', :path => '../'
target 'LLNetworking_Tests' do
inherit! :search_paths
pod 'FBSnapshotTestCase'
end
end
其中為你集成了一個(gè)測試用例 pod 'FBSnapshotTestCase'
香璃,目前可以忽略。
我們可以看到: pod 'LLNetworking', :path => '../'
這一句舟误,path
路徑指向了本地路徑增显,對(duì)應(yīng) LLNetworking
主目錄下:
這個(gè)文件夾下,一個(gè)存放你的各種類文件脐帝,一個(gè)存放圖片資源等。
- podspec 文件
在你回答之前問題之后糖权,pod 為你自動(dòng)創(chuàng)建了該文件堵腹,并執(zhí)行了 pod install
命令,該命令會(huì)找到組件的索引文件(也在本地) LLNetworking.podspec
:
#
# Be sure to run `pod lib lint LLNetworking.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
s.name = 'LLNetworking'
s.version = '0.1.0'
s.summary = 'A short description of LLNetworking.'
# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the description between the DESC delimiters below.
# * Finally, don't worry about the indent, CocoaPods strips it!
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
s.homepage = 'https://github.com/LOLITA0164/LLNetworking'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'LOLITA0164' => '476512340@qq.com' }
s.source = { :git => 'https://github.com/LOLITA0164/LLNetworking.git', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '8.0'
s.source_files = 'LLNetworking/Classes/**/*'
# s.resource_bundles = {
# 'LLNetworking' => ['LLNetworking/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'AFNetworking', '~> 2.3'
end
該文件為你的組件自動(dòng)配置了一些基本的信息星澳,因?yàn)槲抑笆褂眠^ trunk 登陸過疚顷,所以這里有的的賬號(hào)信息。當(dāng)然這些信息是需要你根據(jù)情況修改的禁偎,更多的配置你可以搜索相關(guān)文檔腿堤。
注意:這里的 Git 地址目前是找不到的,后期需要自己關(guān)聯(lián)如暖。
設(shè)置共享文件
podspec
文件中 s.source_files = 'LLNetworking/Classes/**/*'
指代共享的資源路徑笆檀,我們需要將共享的文件放到這里來。
我們打開組件的目錄查看盒至,可以看到這里已經(jīng)有了名為 ReplaceMe
的文件了酗洒,這暗示你用共享文件替換它士修。
podspec
文件中還有一個(gè)被注釋掉的:
# s.resource_bundles = {
# 'LLNetworking' => ['LLNetworking/Assets/*.png']
# }
這個(gè)目錄中存放一些圖片等資源,當(dāng)你需要的時(shí)候可以開啟來樱衷。
我們來創(chuàng)建一個(gè) LLNetworking
類:
@interface LLNetworking : NSObject
-(NSString*)getSomething;
@end
@implementation LLNetworking
-(NSString *)getSomething{
return @"test method.";
}
@end
將其移動(dòng)到組件的共享目錄下并刪除掉空文件ReplaceMe
:
這樣棋嘲,我們就設(shè)置好了共享的內(nèi)容,即組件開發(fā)好了矩桂。接下來沸移,我們使用 Example
工程來使用這個(gè)組件的內(nèi)容。
終端進(jìn)入 Example
工程目錄下侄榴,執(zhí)行 pod install
命令來安裝組件雹锣。
我們發(fā)現(xiàn),Example
項(xiàng)目中 Pods/Development Pods/LLNetworking
下牲蜀,多出來最新添加的文件笆制。
使用組件
我們安裝好組件之后來使用一下組件的功能,就像使用三方庫那樣:
#import <LLNetworking/LLNetworking.h>
-(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
LLNetworking * networking = LLNetworking.new;
NSLog(@"%@",networking.getSomething);
}
控制臺(tái)輸出:
2019-11-08 17:14:47.455341+0800 LLNetworking_Example[7038:1682304] test method.
這表示功能正常涣达。
在組件開發(fā)過程中在辆,使用
pod 'LLNetworking', :path => '../'
將路徑指向本地是很有必要的,方便測試你的組件配置是否正確度苔,功能是否完善匆篓,相比推到遠(yuǎn)程、發(fā)布再集成寇窑,這方便太多了鸦概。
三方依賴庫
有時(shí)候,我們的組件還依賴其他的組件甩骏,又或者是三方庫窗市。我們通過 s.dependency
字段去設(shè)置,多個(gè)庫可以分開寫多次饮笛。
在 Podfiles
模版里最后一條已經(jīng)為我們添加好了咨察,所依賴的是 AFNetworking
,正好是我們網(wǎng)絡(luò)請(qǐng)求組件所依賴的福青,我們把它開啟摄狱,重新 pod install
:
Analyzing dependencies
Fetching podspec for `LLNetworking` from `../`
Downloading dependencies
Installing AFNetworking (2.7.0)
……
我們發(fā)現(xiàn),Example
自動(dòng)拉取了組件 LLNetworking
所依賴的其他組件无午。CocoaPods
工具的另外一個(gè)優(yōu)點(diǎn)就是媒役,多個(gè)組件依賴同一個(gè)組件時(shí),它會(huì)自動(dòng)幫你檢測安裝宪迟,而不會(huì)重復(fù)導(dǎo)入酣衷。
我們發(fā)現(xiàn) Example
工程的 Pods
中,本地開發(fā)的組件和遠(yuǎn)程發(fā)布的組件被分別放在了不同的目錄下踩验。
有了 AFNetworking
之后鸥诽,你就可以修改你的網(wǎng)絡(luò)請(qǐng)求組件了:
#import <AFNetworking/AFNetworking.h>
@interface LLNetworking : NSObject
@property(strong,nonatomic)NSURLSessionDataTask *task;
- (NSURLSessionDataTask *)POSTWithURLString:(NSString *)URLString parameters:(id)parameters success:(void (^)(id responseObject))success failure:(void (^)(id error))failure;
@end
@implementation LLNetworking
- (NSURLSessionDataTask *)POSTWithURLString:(NSString *)URLString parameters:(id)parameters success:(void (^)(id responseObject))success failure:(void (^)(id error))failure{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
manager.requestSerializer.timeoutInterval = 20;
_task = [manager POST:URLString parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if (success) {
success(@{@"status":@"success"});
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failure) {
failure(@{@"status":@"failure"});
}
}];
return _task;
}
@end
修改好之后商玫,還不能直接在 Example
中使用,需要卸載組件再重新安裝牡借。注釋掉 pod 'LLNetworking', :path => '../'
之后執(zhí)行 pod install
即可完成卸載拳昌。
至此,你完成了組件的創(chuàng)建钠龙、文件共享炬藤、本地化測試使用和更新。但是碴里,我們的組件畢竟是要服務(wù)于宿主工程的沈矿,如果僅僅只能是通過本地集成,那意義不大咬腋,我們要將其關(guān)聯(lián)到遠(yuǎn)程服務(wù)器羹膳,推送到本地搭建的 GitLab
,又或者是 GitHub
根竿、碼云
陵像、Coding
等平臺(tái)。
關(guān)聯(lián)遠(yuǎn)程倉庫
在模版 podspec
文件中寇壳,已經(jīng)幫我們指定了一個(gè) GitHub
的倉庫地址醒颖,
s.homepage = 'https://github.com/LOLITA0164/LLNetworking'
你可以使用它或者進(jìn)行修改它。我們這里選擇使用它壳炎,先去 GitHub
創(chuàng)建對(duì)應(yīng)的倉庫泞歉。
在最初創(chuàng)建組件時(shí),系統(tǒng)已經(jīng)幫我們創(chuàng)建好了本地 Git 倉庫匿辩,進(jìn)入到項(xiàng)目中腰耙,顯示出隱藏文件夾就可以看到(command+shift+. 顯隱):
如果沒有,你可以使用命令 git init
創(chuàng)建一個(gè)〔颍現(xiàn)在沟优,我們要將之前的修改進(jìn)行提交(本地提交)。
git commit -am "第一次提交"
然后我們要把本地的 Git 倉庫和剛剛創(chuàng)建的遠(yuǎn)程倉庫進(jìn)行關(guān)聯(lián)睬辐。如何關(guān)聯(lián)呢?你在網(wǎng)站上創(chuàng)建項(xiàng)目后有了這樣的提示:
這里有三種:創(chuàng)建一個(gè)新的倉庫宾肺,推送一個(gè)已存在的倉庫以及從其他倉庫導(dǎo)入溯饵。我們這里使用第二種即可。
添加遠(yuǎn)程倉庫:
git remote add origin https://github.com/LOLITA0164/LLNetworking.git
將本地內(nèi)容推送到遠(yuǎn)程倉庫:
git push -u origin master
可能會(huì)出現(xiàn)讓你登陸驗(yàn)證锨用,輸入你的用戶名和密碼即可丰刊。出現(xiàn)以下信息即表示推送成功。
remote: Resolving deltas: 100% (49/49), done.
To https://github.com/LOLITA0164/LLNetworking.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
回到 GitHub
刷新一下即可看到你的提交記錄增拥。
上述是通過終端命令進(jìn)行 git 操作啄巧,如果你并不熟悉 git 命令寻歧,你大可以使用便捷的可視化工具(上一章節(jié)有所提及),僅需簡單的點(diǎn)擊操作即可完成項(xiàng)目的管理秩仆。
打 tag
并發(fā)布到 Cocoapods
打標(biāo)簽
至此码泛,我們已經(jīng)成功的將本地倉庫關(guān)聯(lián)并推送到遠(yuǎn)程倉庫,現(xiàn)在我們要發(fā)布一個(gè)可用的組件澄耍。
首先我們要給當(dāng)前項(xiàng)目打一個(gè) tag
版本號(hào)噪珊,在 podspec
中:
s.version = '0.1.0'
指定的版本號(hào)是 0.1.0
,那么我們就同樣打個(gè) 0.1.0
的 tag
:
$ git tag 0.1.0 // 打 tag
$ git push --tags // 推送到遠(yuǎn)程
打 tag
默認(rèn)在當(dāng)前分支上齐莲,因?yàn)檫@里只有 master
痢站,所以不用切換分支,如果后期有其他分支选酗,注意別弄錯(cuò)了阵难。
刷新頁面,項(xiàng)目的 release
選項(xiàng)中會(huì)出現(xiàn)剛剛打的版本芒填。
你也可以直接在頁面的 release
下添加新的 tag
呜叫,點(diǎn)擊 release
可以看到編輯頁面:
發(fā)布到 CocoaPods
由于我們創(chuàng)建的項(xiàng)目以及標(biāo)簽的版本號(hào)都是沿用了 podspec
文件中的信息,因此可以直接驗(yàn)證 podspec
文件信息是否可以通過驗(yàn)證氢烘,如果需要調(diào)整怀偷,調(diào)整之后最好同樣先驗(yàn)證:
pod spec lint
podspec
文件的版本號(hào)一定要和tag
保持一致。
如果通過驗(yàn)證播玖,那么你會(huì)看到類似下面的提示椎工,綠色的 passed validation
:
現(xiàn)在可以將 podspec
文件提交到 CocoaPods
上了:
首先要通過 trunk
注冊(cè)生成一條會(huì)話:
// pod trunk register 郵箱 用戶名 描述
pod trunk register 476512340@qq.com LOLITA0164 --description=組件化demo
然后去郵箱進(jìn)行驗(yàn)證,驗(yàn)證成功會(huì)出現(xiàn)下面頁面:
現(xiàn)在蜀踏,就可以將 podspec
提交給 CocoaPods
了维蒙。這個(gè)文件將是別人搜索你的組件的索引。
pod trunk push LLNetworking.podspec --allow-warnings
上傳完成之后果覆,接可以通過 pod search LLNetworking
搜索到自己的組件了颅痊,如果搜索不到,刪除本地的搜索文件局待,命令 :
rm ~/Library/Caches/CocoaPods/search_index.json
重新 search
產(chǎn)生新的搜索文件斑响。
發(fā)布新版本則需要打新的
tag
,重新編輯podspec
文件钳榨,然后再次提交給CocoaPods
舰罚。