在第一次組件化的時候,須要執行不少操做,這些操做能夠在【iOS 組件化開發(一):遠程私有庫的基本使用】,這裏就再也不贅述,在組件化後的重複性操做就是升級,而升級這個過程是如出一轍的。那麼,咱們有什麼辦法能夠很方便的搞定這一過程來節約咱們大量的時間呢?git
修改完核心代碼後,一共還須要作如下幾步:
一、修改spec文件(修改s.version,s.description等)
二、pod install
(使Example與pod下來的庫產生關聯)
三、提交本地倉庫代碼至遠程倉庫
四、打標籤,並提交至遠程
五、驗證spec,並提至私有索引庫github
Fastlane文檔說明 Fastlane是一個ruby腳本集合,它能夠按照咱們指定的路線,在指定位置執行咱們所要執行的操做。這裏咱們稱這樣的路線爲「航道(lane)」,這樣的操做稱爲「Action」ruby
Action是Fastlane自動化流程中的最小執行單元,用來執行Fastlane腳本中的命令,關於更多的描述能夠到Actions - fastlane docs查看,裏面也介紹了經常使用的action有哪些,順帶附上action的源碼地址,這個源碼在後面自定義起參考做用bash
brew update
brew install ruby
複製代碼
sudo gem install -n /usr/local/bin fastlane
複製代碼
fastlane --version
複製代碼
fastlane actions
複製代碼
cd到你的本地組件倉庫的根目錄微信
fastlane init
# 建立一個fastlane文件夾
# 進入fastlane目錄
# 建立一個Fastfile文件
mkdir fastlane
cd fastlane
touch Fastfile
複製代碼
desc '描述航道做用'
lane :航道名稱 do |options|
// options 能夠用來傳遞參數
// 示例:varName = options[:name]
// 航道上須要執行的操做
end
複製代碼
航道上要掃描的操做能夠到Actions上查找,能夠經過關鍵字搜索,以下圖 工具
這裏附上本人的Fastfile內容:組件化
desc 'LXFUpdatePodTool 航道用來自動化升級維護私有庫'
lane : LXFUpdatePodTool do |options|
tagNum = options[:tag]
podspecName = options[:specName]
# 航道上須要執行的操做
# 具體action到 https://docs.fastlane.tools/actions 上面查找
# 這裏的路徑以倉庫根目錄爲準
# 一、修改spec文件(修改s.version,s.description等)
# 二、pod install (使Example與pod下來的庫產生關聯)
cocoapods(
clean: true,
podfile: "./Example/Podfile"
)
# 三、提交本地倉庫代碼至遠程倉庫
git_add(path: ".")
git_commit(path: ".", message: "upgrade repo")
push_to_git_remote
# 四、打標籤,並提交至遠程
add_git_tag(
tag: tagNum
)
push_git_tags
# 五、驗證spec,並提至私有索引庫
pod_lib_lint(allow_warnings: true)
# 由於本地索引庫repo的名字是基本上不會去改變的,因此這裏直接寫死 LXFSpecs
# podspec的名字須要由外界傳入
pod_push(path: "#{podspecName}.podspec", repo: "LXFSpecs")
end
複製代碼
fastlane lanes
複製代碼
須要在組件倉庫的根目錄下執行 post
fastlane LXFUpdatePodTool tag:0.1.1 specName:LXFMain
複製代碼
整個執行過程不超過30秒~測試
以上的過程已經能夠完成一整個自動化更新了,可是有一點須要注意的是,這個輸入的tag可能會面臨一個問題,那就是本地和遠程均可能已經存在,即發生衝突,這個時候咱們能夠選擇自動刪除本地和遠程衝突的那個tag,再從新上傳當前tagui
fastlane new_action
複製代碼
按要求輸入Action名稱
完成後fastlane目錄下就會多出一個名爲actions的文件夾,裏面存放的就是你自定義action
打開remove_git_tag.rb,開始自定義咱們的action吧,什麼?不會語法怎麼辦?能夠參考別人的嘛,上面給出的action的源碼地址就有用武之地了,好比pod_push。這裏我直接貼出我已經完成的主要代碼
# 可使用 fastlane action remove_git_tag 來參看詳細描述
def self.run(params)
# 這裏寫要執行的操做
# params[:參數名稱] 參數名稱與下面self.available_options中的保持一致
tagNum = params[:tagNum]
rmLocalTag = params[:rmLocalTag]
rmRemoteTag = params[:rmRemoteTag]
command = []
if rmLocalTag
# 刪除本地標籤
# git tag -d 標籤名稱
command << "git tag -d #{tagNum}"
end
if rmRemoteTag
# 刪除遠程標籤
# git push origin :標籤名稱
command << "git push origin :#{tagNum}"
end
result = Actions.sh(command.join('&'))
UI.success("Successfully remove tag 🚀 ")
return result
end
def self.description
# 對當前腳本的簡單描述
"刪除tag"
end
def self.details
# 對當前腳本的具體描述
"使用當前action來刪除本地和遠程衝突的tag"
end
def self.available_options
# 用來傳遞參數
[
FastlaneCore::ConfigItem.new(key: :tagNum,
description: "輸入即將刪除的tag",
is_string: true),
FastlaneCore::ConfigItem.new(key: :rmLocalTag,
description: "是否刪除本地tag",
optional:true,
is_string: false,
default_value: true),
FastlaneCore::ConfigItem.new(key: :rmRemoteTag,
description: "是否刪除遠程tag",
optional:true,
is_string: false,
default_value: true)
]
end
def self.authors
# 做者姓名
["LinXunFeng"]
end
複製代碼
一樣,這裏先cd到組件庫的根目錄下執行,緣由是這個自定義action只存在當前根目錄下的fastlane中,其它fastlane的非自定義的action就不用在當前根目錄下操做~
fastlane action remove_git_tag
複製代碼
先來看看當前組件庫已存在的tag
git tag
複製代碼
能夠看到,我是已經有一個0.1.1
版本的了。這時咱們再來執行一次LXFUpdatePodTool航道
fastlane LXFUpdatePodTool tag:0.1.1 specName:LXFMain
複製代碼
LXFUpdatePodTool 已經傳到個人GitHub上,須要的同窗就拿走吧,順手給個Star咯 Orz