fastlane 實(shí)現(xiàn)自定義Action

有的時(shí)候官方提供的所有的Action并不能滿足我們的需求,這個(gè)時(shí)候就需要我們自己自定義Action用來(lái)調(diào)用了尘应,我感覺(jué)這也是fastlane一個(gè)很好的擴(kuò)展功能。
比如我們現(xiàn)在有這么一個(gè)場(chǎng)景犬钢,在使用fastlane更新遠(yuǎn)程的私有庫(kù)或者共有庫(kù)的時(shí)候,我們?cè)诮o項(xiàng)目打tag的時(shí)候混滔,先判斷一下當(dāng)前的項(xiàng)目是不是已經(jīng)存在了相同名稱的tag,如果有的話遍坟,刪除掉晴股,再進(jìn)行下一步操作愿伴,如果沒(méi)有的話电湘,不執(zhí)行我們的action。
如果對(duì)fastlane的action概念不是很熟悉的話寂呛,建議先看一下fastlane更新遠(yuǎn)程的私有庫(kù),里面有對(duì)Action操作和運(yùn)用的相關(guān)示例贷痪。

創(chuàng)建自定義的Action步驟如下:
1、先創(chuàng)建一個(gè)ruby文件
1.1肉津、首先進(jìn)入到fastlane的目錄下面

image.png

1.2舱沧、運(yùn)行命令創(chuàng)建ruby文件

fastlane new_action
image.png

注意事項(xiàng),自定義的action名字的命名規(guī)范如下:

Must be lower case, and use a '_' between words. Do not use '.'
examples: 'testflight', 'upload_to_s3'

2熟吏、認(rèn)識(shí)下創(chuàng)建出來(lái)的文件的組成部分

image.png

image.png

3、修改創(chuàng)建出來(lái)的ruby文件悍引,形成我們的自定義的Action腳本
3.1、說(shuō)一下我們當(dāng)前設(shè)計(jì)的Action的需求是吗铐,給出三個(gè)參數(shù),
tag: tag號(hào)唬渗,字符串奋渔,不可省略
isRL: 是否要?jiǎng)h除本地倉(cāng)庫(kù)的tag镊逝,Bool類型嫉鲸,可以省略,默認(rèn)的參數(shù)是false
isRR: 是否要?jiǎng)h除遠(yuǎn)程倉(cāng)庫(kù)的tag,Bool類型座菠,可以省略,默認(rèn)的參數(shù)是false

module Fastlane
    module Actions
        module SharedValues
            REMOVE_TAG_CUSTOM_VALUE = :REMOVE_TAG_CUSTOM_VALUE
        end
        
        class RemoveTagAction < Action
            def self.run(params)
            # 最終要執(zhí)行的東西拓萌,在這里執(zhí)行
            
            # 1、獲取所有輸入的參數(shù)
            # tag 的名稱 如 0.1.0
            tageName = params[:tag]
            # 是否需要?jiǎng)h除本地標(biāo)簽
            isRemoveLocationTag = params[:isRL]
            # 是否需要?jiǎng)h除遠(yuǎn)程標(biāo)簽
            isRemoveRemoteTag = params[:isRR]
            
            # 2微王、定義一個(gè)數(shù)組,準(zhǔn)備往數(shù)組里面添加相應(yīng)的命令
            cmds = []
            
            # 刪除本地的標(biāo)簽
            # git tag -d 標(biāo)簽名稱
            if isRemoveLocationTag
                cmds << "git tag -d #{tageName}"
            end
            
            # 刪除遠(yuǎn)程標(biāo)簽
            # git push origin :標(biāo)簽名稱
            if isRemoveRemoteTag
                cmds << "git push origin :#{tageName}"
            end
    
            # 3炕倘、執(zhí)行數(shù)組里面的所有的命令
            result = Actions.sh(cmds.join('&'))
            UI.message("執(zhí)行完畢 remove_tag的操作 ??")
            return result
    
            
        end
        
        #####################################################
        # @!group Documentation
        #####################################################
        
        def self.description
        "輸入標(biāo)簽翰撑,刪除標(biāo)簽"
    end
    
    def self.details
    # Optional:
    # this is your chance to provide a more detailed description of this action
"我們可以使用這個(gè)標(biāo)簽來(lái)刪除git遠(yuǎn)程的標(biāo)簽\n 使用方式是:\n remove_tag(tag:tagName,isRL:true,isRR:true) \n或者 \nremove_tag(tag:tagName)"
end

# 接收相關(guān)的參數(shù)
def self.available_options

# Define all options your action supports.

# Below a few examples
[

# 傳入tag值的參數(shù)描述,不可以忽略<必須輸入>眶诈,字符串類型,沒(méi)有默認(rèn)值
FastlaneCore::ConfigItem.new(key: :tag,
                             description: "tag 號(hào)是多少",
                             optional:false,# 是不是可以省略
                             is_string: true, # true: 是不是字符串
                             ),
# 是否刪除本地標(biāo)簽
FastlaneCore::ConfigItem.new(key: :isRL,
                             description: "是否刪除本地標(biāo)簽",
                             optional:true,# 是不是可以省略
                             is_string: false, # true: 是不是字符串
                             default_value: true), # 默認(rèn)值是啥

# 是否刪除遠(yuǎn)程標(biāo)簽
FastlaneCore::ConfigItem.new(key: :isRR,
                             description: "是否刪除遠(yuǎn)程標(biāo)簽",
                             optional:true,# 是不是可以省略
                             is_string: false, # true: 是不是字符串
                             default_value: true) # 默認(rèn)值是啥

]
end

def self.output
# Define the shared values you are going to provide
# Example

end

def self.return_value
# If your method provides a return value, you can describe here what it does
nil
end

def self.authors
# So no one will ever forget your contribution to fastlane :) You are awesome btw!
["zhangyan"]
end

# 支持平臺(tái)
def self.is_supported?(platform)
# you can do things like
#
#  true
#
#  platform == :ios
#
#  [:ios, :mac].include?(platform)
#

platform == :ios
end
end
end
end

3.2东帅、寫完之后驗(yàn)證一下書寫的格式是否正確
終端命令在fastlane的上級(jí)目錄下執(zhí)行

fastlane action remove_tag
image.png

4球拦、調(diào)用使用
在我們的fastfile中寫的lane中進(jìn)行相關(guān)的調(diào)用靠闭,下面展示的是更新遠(yuǎn)程私有庫(kù)的lane

調(diào)用代碼

# 驗(yàn)證當(dāng)前tag是否存在坎炼,如果說(shuō)存在的話,干掉谣光,進(jìn)行下一步,創(chuàng)建一個(gè)tag萄金,如果說(shuō)不存在的話,直接創(chuàng)建tag
if git_tag_exists(tag: tagName)
  UI.message("發(fā)現(xiàn) tag:#{tagName} 存在氧敢,即將執(zhí)行刪除動(dòng)作 ??")
  # 下面的兩種寫法都可以
  remove_tag(tag:tagName,isRL:true,isRR:true)
  #remove_tag(tag:tagName)
end

lane的整體代碼

#################################################################

desc "通過(guò) upgradePrivateSpec 可以快速的對(duì)遠(yuǎn)程私有庫(kù)完成升級(jí)工作"
lane :upgradePrivateSpec do |options|
#外界輸入的tag值
tagName = options[:tag]

specName = options[:specName]

podspecPath = "#{specName}.podspec"

#具體在這個(gè)文件上執(zhí)行哪些行為

# 1、git pull
git_pull

# 2孙乖、pod install

cocoapods(
clean: true,
podfile: "./Example/Podfile"
)

# 3份氧、git add .

git_add(path: ".")

#  git commit -m 'message'

git_commit(path: ".", message: "Version Bump")

#  git push origin master

push_to_git_remote

# 驗(yàn)證當(dāng)前tag是否存在弯屈,如果說(shuō)存在的話,干掉资厉,進(jìn)行下一步,創(chuàng)建一個(gè)tag酌住,如果說(shuō)不存在的話阎抒,直接創(chuàng)建tag
if git_tag_exists(tag: tagName)
  UI.message("發(fā)現(xiàn) tag:#{tagName} 存在,即將執(zhí)行刪除動(dòng)作 ??")
  # 下面的兩種寫法都可以
  remove_tag(tag:tagName,isRL:true,isRR:true)
  #remove_tag(tag:tagName)
end


# 4且叁、git tag ...

add_git_tag(
tag: tagName
)

#    git push --tags

push_git_tags


# 5、pod spec lint 檢測(cè)當(dāng)前spec的格式

pod_lib_lint(allow_warnings: true)

#    pod repo push XXX  xxxx.podspec

pod_push(path: podspecPath, repo: "PrivateSpecsGather", allow_warnings:true)

end

5逞带、測(cè)試一下
5.1、為了測(cè)試展氓,可以先把遠(yuǎn)程私有庫(kù)添加上一個(gè)tag,然后再去運(yùn)行我們的lane遇汞。看一下能不能把我們的本地的和遠(yuǎn)程的tag都給干掉空入。
運(yùn)行l(wèi)ane

fastlane upgradePrivateSpec tag:0.1.8 specName:DownLoader repo:PrivateSpecsGather

注意:當(dāng)前我們的代碼tag已經(jīng)存在0.1.8了。

image.png
image.png

大功告成化戳。

其他的自定義的Action也可以這么進(jìn)行創(chuàng)建埋凯。

如有失誤請(qǐng)各位路過(guò)大神即時(shí)指點(diǎn)点楼,或有更好的做法白对,也請(qǐng)指點(diǎn)一二。在下不甚感激躏结。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末狰域,一起剝皮案震驚了整個(gè)濱河市黄橘,隨后出現(xiàn)的幾起案子兆览,更是在濱河造成了極大的恐慌塞关,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件小压,死亡現(xiàn)場(chǎng)離奇詭異椰于,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)瘾婿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)偏陪,“玉大人,你說(shuō)我怎么就攤上這事笛谦。” “怎么了饥脑?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)轩娶。 經(jīng)常有香客問(wèn)我,道長(zhǎng)鳄抒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任许溅,我火速辦了婚禮秉版,結(jié)果婚禮上贤重,老公的妹妹穿的比我還像新娘清焕。我一直安慰自己祭犯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布沃粗。 她就那樣靜靜地躺著键畴,像睡著了一般最盅。 火紅的嫁衣襯著肌膚如雪起惕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天惹想,我揣著相機(jī)與錄音,去河邊找鬼勺馆。 笑死侨核,一個(gè)胖子當(dāng)著我的面吹牛草穆,可吹牛的內(nèi)容都是我干的搓译。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼些己,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了段标?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤逼庞,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后赛糟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掌逛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年司倚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了豆混。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡遗淳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出心傀,到底是詐尸還是另有隱情,我是刑警寧澤脂男,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站弃甥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏淆攻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一瓶珊、第九天 我趴在偏房一處隱蔽的房頂上張望耸彪。 院中可真熱鬧伞芹,春花似錦蝉娜、人聲如沸唱较。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)荧呐。三九已至,卻和暖如春坛增,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背收捣。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留罢艾,地道東北人尽纽。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓童漩,卻偏偏與公主長(zhǎng)得像弄贿,于是被迫代替她去往敵國(guó)和親矫膨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子差凹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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

  • 目前比較流行的組件化開發(fā)危尿,針對(duì)多個(gè) app 要用同一套代碼,將其做成 pod 倉(cāng)庫(kù)是比較好的解決方案谊娇。代碼只有一份...
    ripperhe閱讀 5,405評(píng)論 8 39
  • Fastlane簡(jiǎn)介 Fastlane是用Ruby語(yǔ)言編寫的一套自動(dòng)化工具集和框架,每一個(gè)工具實(shí)際都對(duì)應(yīng)一個(gè)Rub...
    小_夭閱讀 7,773評(píng)論 2 15
  • 作為架構(gòu)師的我們常常要面臨的一個(gè)難題就是技術(shù)選型〖没叮現(xiàn)在無(wú)論是商業(yè)項(xiàng)目也好小渊,開源項(xiàng)目也好法褥,可供選擇的方案實(shí)在是太多粤铭,...
    老邢Thierry閱讀 4,860評(píng)論 17 52
  • 更新節(jié)點(diǎn):2019-05-15由于fastlane更新頻繁挖胃,已更新到 2.105.2 2.122.0更新內(nèi)容:fa...
    就叫yang閱讀 61,799評(píng)論 73 146
  • 當(dāng)我們的遠(yuǎn)程私有庫(kù)集成完畢之后梆惯,后期可能需要不斷的維護(hù)更新升級(jí)吗垮。如果你對(duì)遠(yuǎn)程私有庫(kù)不是很了解垛吗,建議先了解一下: 教...
    踩坑小分隊(duì)閱讀 2,682評(píng)論 1 5