一昙啄、升級必備操作
- 修改完核心代碼后律歼,一共還需要做以下幾步:
- 1踊挠、修改spec文件(修改s.version只怎,s.description等)
- 2袜瞬、pod install (使Example與pod下來的庫產(chǎn)生關(guān)聯(lián))
- 3、提交本地倉庫代碼至遠(yuǎn)程倉庫
- 4身堡、打標(biāo)簽邓尤,并提交至遠(yuǎn)程
- 5、驗(yàn)證spec贴谎,并提至私有索引庫
二汞扎、Fastlane
1、簡介
Fastlane是一個(gè)ruby腳本集合擅这,它可以按照我們指定的路線澈魄,在指定位置執(zhí)行我們所要執(zhí)行的操作。這里我們稱這樣的路線為「航道(lane)」仲翎,這樣的操作稱為「Action」
Action是Fastlane自動化流程中的最小執(zhí)行單元痹扇,用來執(zhí)行Fastlane腳本中的命令铛漓,關(guān)于更多的描述可以到Actions - fastlane docs查看,里面也介紹了常用的action有哪些帘营,順帶附上action的源碼地址票渠,這個(gè)源碼在后面自定義起參考作用
2、 安裝
- 確保ruby為最新版本
brew update
brew install ruby
安裝fastlane
sudo gem install -n /usr/local/bin fastlane
查看當(dāng)前fastlane版本
fastlane --version
查看所有action
fastlane actions
三芬迄、fastlane初始化
cd到你的本地組件倉庫的根目錄
- 初始化fastlane
fastlane init
不過這個(gè)步驟對我們來說可以跳過问顷,在init后提示你輸入一些東西,包括上傳需要用到的APPLE ID什么的一堆東西禀梳,由于我們并不涉及這些杜窄,所以我們使用更方便的方式
# 創(chuàng)建一個(gè)fastlane文件夾
# 進(jìn)入fastlane目錄
# 創(chuàng)建一個(gè)Fastfile文件
mkdir fastlane
cd fastlane
touch Fastfile
1、修改Fastfile
desc 'EmojiToolModelTool 航道用來自動化升級維護(hù)私有庫'
lane :EmojiToolModelTool do |options|
tagNum = options[:tag]
podspecName = options[:specName]
# 航道上需要執(zhí)行的操作
# 具體action到 https://docs.fastlane.tools/actions 上面查找
# 這里的路徑以倉庫根目錄為準(zhǔn)
# 1算途、修改spec文件(修改s.version塞耕,s.description等)
# 2、pod install (使Example與pod下來的庫產(chǎn)生關(guān)聯(lián))
cocoapods(
clean: true,
podfile: "./Example/Podfile"
)
# 3嘴瓤、提交本地倉庫代碼至遠(yuǎn)程倉庫
git_add(path: ".")
git_commit(path: ".", message: "upgrade repo")
push_to_git_remote
# 4扫外、打標(biāo)簽,并提交至遠(yuǎn)程
add_git_tag(
tag: tagNum
)
push_git_tags
# 5廓脆、驗(yàn)證spec筛谚,并提至私有索引庫
pod_lib_lint(allow_warnings: true)
# 因?yàn)楸镜厮饕龓靣epo的名字是基本上不會去改變的,所以這里直接寫死 XDSpecs
# podspec的名字需要由外界傳入
pod_push(path: "#{podspecName}.podspec", repo: "XDSpecs", allow_warnings: true)
![屏幕快照 2018-06-05 17.06.06.png](https://upload-images.jianshu.io/upload_images/1658726-cdc3496cf8e8c406.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
end
2 停忿、驗(yàn)證Fastfile
fastlane lanes
3驾讲、執(zhí)行fastlane
需要在組件倉庫的根目錄下執(zhí)行,進(jìn)入到fastlane的同級目錄下
cd EmojiToolModel
- 3.1 然后執(zhí)行
#EmojiToolModelTool : 是你自定義的航道名稱(在上面修改Fastfile里定義的名稱)
#tag : 是你要打的tag(tag要與spec文件的tag一致,注意這里不能存在已經(jīng)存在的tag,如果存在會報(bào)錯(cuò),后面會說)
#EmojiToolModel : 是你定義的spec文件名稱
fastlane EmojiToolModelTool tag:0.1.1 specName:EmojiToolModel
四、自定義Action
- 以上的過程已經(jīng)可以完成一整個(gè)自動化更新了席赂,但是有一點(diǎn)需要注意的是吮铭,這個(gè)輸入的tag可能會面臨一個(gè)問題,那就是本地和遠(yuǎn)程都可能已經(jīng)存在颅停,即發(fā)生沖突谓晌,這個(gè)時(shí)候我們可以選擇自動刪除本地和遠(yuǎn)程沖突的那個(gè)tag,再重新上傳當(dāng)前tag
1癞揉、創(chuàng)建一個(gè)新的action
fastlane new_action
-
完成后fastlane目錄下就會多出一個(gè)名為actions的文件夾纸肉,里面存放的就是你自定義action
2、編輯自定義action
打開remove_git_tag.rb烧董,開始自定義我們的action吧毁靶,什么?不會語法怎么辦逊移?可以參考別人的嘛预吆,上面給出的action的源碼地址就有用武之地了,比如pod_push胳泉。這里我直接貼出我已經(jīng)完成的主要代碼
module Fastlane
module Actions
module SharedValues
REMOVE_TAG_CUSTOM_VALUE = :REMOVE_TAG_CUSTOM_VALUE
end
class RemoveTagAction < Action
def self.run(params)
# 這里寫要執(zhí)行的操作
# params[:參數(shù)名稱] 參數(shù)名稱與下面self.available_options中的保持一致
tagName = params[:tag]
isRemoveLocalTag = params[:rL]
isRemoveRemoteTag = params[:rR]
# 定義數(shù)組 添加需要執(zhí)行的命令
cmds = []
# 刪除本地標(biāo)簽
if isRemoveLocalTag
cmds << "git tag -d #{tagName} "
end
# 刪除本地標(biāo)簽
if isRemoveRemoteTag
cmds << " git push origin :#{tagName}"
end
# 執(zhí)行數(shù)組里的命令
result = Actions.sh(cmds.join('&'))
UI.success("Successfully remove tag #{tagName}")
return result
end
def self.description
"刪除本地和遠(yuǎn)程的標(biāo)簽!!!"
end
def self.details
# Optional:
# this is your chance to provide a more detailed description of this action
"使用這個(gè)action,來刪除本地和遠(yuǎn)程沖突的tag"
end
def self.available_options
# Define all options your action supports.
# Below a few examples
[
# tagName : 標(biāo)簽名稱 description : 描述 optional : 是否可選 is_string : 是否是字符串
FastlaneCore::ConfigItem.new(key: :tag,
description: "刪除的標(biāo)簽名稱",
optional: false,
is_string: true),
# rL(remove Local) : 標(biāo)簽名稱 description : 描述 optional : 是否可選 is_string : 是否是字符串
FastlaneCore::ConfigItem.new(key: :rL,
description: "是否刪除本地標(biāo)簽",
optional: true,
is_string: false,
default_value: true),
# rR(remove Remote) : 標(biāo)簽名稱 description : 描述 optional : 是否可選 is_string : 是否是字符串
FastlaneCore::ConfigItem.new(key: :rR,
description: "是否刪除遠(yuǎn)程標(biāo)簽",
optional: true,
is_string: false,
default_value: true)
]
end
def self.output
# Define the shared values you are going to provide
# Example
[
['REMOVE_TAG_CUSTOM_VALUE', 'A description of what this value contains']
]
end
def self.return_value
nil
# If your method provides a return value, you can describe here what it does
end
def self.authors
# So no one will ever forget your contribution to fastlane :) You are awesome btw!
["CodeST"]
end
def self.is_supported?(platform)
# you can do things like
#
# true
#
# platform == :ios
#
# [:ios, :mac].include?(platform)
#
platform == :ios
end
end
end
end
3拐叉、查看action描述
- 驗(yàn)證我們寫的這個(gè)action是否有錯(cuò)
fastlane action remove_tag
- 驗(yàn)證成功后可以完善自己的
fastlane
- 新增3.1
desc 'EmojiToolModelTool 航道用來自動化升級維護(hù)私有庫'
lane :EmojiToolModelTool do |options|
tagName = options[:tag]
podspecName = options[:specName]
# 航道上需要執(zhí)行的操作
# 具體action到 https://docs.fastlane.tools/actions 上面查找
# 這里的路徑以倉庫根目錄為準(zhǔn)
# 1岩遗、修改spec文件(修改s.version,s.description等)
# 2凤瘦、pod install (使Example與pod下來的庫產(chǎn)生關(guān)聯(lián))
cocoapods(
clean: true,
podfile: "./Example/Podfile"
)
# 3宿礁、提交本地倉庫代碼至遠(yuǎn)程倉庫
git_add(path: ".")
git_commit(path: ".", message: "upgrade repo")
push_to_git_remote
# 3.1 驗(yàn)證tag是否存在,如果存在,應(yīng)該深處本地標(biāo)簽和遠(yuǎn)程標(biāo)簽
if git_tag_exists(tag: tagName)
UI.success("發(fā)現(xiàn)tag:#{tagName} 已經(jīng)存在,即將執(zhí)行,刪除操作??")
remove_tag(tag:tagName)
end
# 4、打標(biāo)簽蔬芥,并提交至遠(yuǎn)程
add_git_tag(
tag: tagName
)
push_git_tags
# 5梆靖、驗(yàn)證spec,并提至私有索引庫
pod_lib_lint(allow_warnings: true)
# 因?yàn)楸镜厮饕龓靣epo的名字是基本上不會去改變的笔诵,所以這里直接寫死 XDSpecs
# podspec的名字需要由外界傳入
pod_push(path: "#{podspecName}.podspec", repo: "XDSpecs", allow_warnings: true)
end
5 . 最后驗(yàn)證
查看已經(jīng)存在的tag
git tag
-
用工具刪除已經(jīng)存在的tag
fastlane EmojiToolModelTool tag:0.1.3 specName:EmojiToolModel