iOS 組件化開發(四):fastlane實現pod自動化

在第一次組件化的時候,須要執行不少操做,這些操做能夠在【iOS 組件化開發(一):遠程私有庫的基本使用】,這裏就再也不贅述,在組件化後的重複性操做就是升級,而升級這個過程是如出一轍的。那麼,咱們有什麼辦法能夠很方便的搞定這一過程來節約咱們大量的時間呢?git

1、升級必備操做

修改完核心代碼後,一共還須要作如下幾步:
一、修改spec文件(修改s.version,s.description等)
二、pod install (使Example與pod下來的庫產生關聯)
三、提交本地倉庫代碼至遠程倉庫
四、打標籤,並提交至遠程
五、驗證spec,並提至私有索引庫github

2、Fastlane

一、簡介

Fastlane文檔說明 Fastlane是一個ruby腳本集合,它能夠按照咱們指定的路線,在指定位置執行咱們所要執行的操做。這裏咱們稱這樣的路線爲「航道(lane)」,這樣的操做稱爲「Action」ruby

Action是Fastlane自動化流程中的最小執行單元,用來執行Fastlane腳本中的命令,關於更多的描述能夠到Actions - fastlane docs查看,裏面也介紹了經常使用的action有哪些,順帶附上action的源碼地址,這個源碼在後面自定義起參考做用bash

二、 安裝

  • 確保ruby爲最新版本
brew update
brew install ruby
複製代碼
  • 安裝fastlane
sudo gem install -n /usr/local/bin fastlane
複製代碼
  • 查看當前fastlane版本
fastlane --version
複製代碼
  • 查看全部action
fastlane actions
複製代碼

3、fastlane初始化

cd到你的本地組件倉庫的根目錄微信

  • 初始化fastlane fastlane init 不過這個步驟對咱們來講能夠跳過,在init後提示你輸入一些東西,包括上傳須要用到的APPLE ID什麼的一堆東西,因爲咱們並不涉及這些,因此咱們使用更方便的方式
# 建立一個fastlane文件夾
# 進入fastlane目錄
# 建立一個Fastfile文件
mkdir fastlane
cd fastlane
touch Fastfile
複製代碼

目錄結構

一、修改Fastfile

desc '描述航道做用'
lane :航道名稱 do |options|

// options 能夠用來傳遞參數
// 示例:varName = options[:name]

// 航道上須要執行的操做

end
複製代碼

航道上要掃描的操做能夠到Actions上查找,能夠經過關鍵字搜索,以下圖 工具

cocoapods
點進去能夠看到具體的使用及參數說明

使用說明

這裏附上本人的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
複製代碼

二、驗證Fastfile

fastlane lanes
複製代碼

Fastfile驗證成功

三、執行fastlane

須要在組件倉庫的根目錄下執行 post

根目錄

fastlane LXFUpdatePodTool tag:0.1.1 specName:LXFMain
複製代碼

開始執行

上傳完成

整個執行過程不超過30秒~測試

4、自定義Action

以上的過程已經能夠完成一整個自動化更新了,可是有一點須要注意的是,這個輸入的tag可能會面臨一個問題,那就是本地和遠程均可能已經存在,即發生衝突,這個時候咱們能夠選擇自動刪除本地和遠程衝突的那個tag,再從新上傳當前tagui

一、建立一個新的action

fastlane new_action
複製代碼

按要求輸入Action名稱

輸入action名稱

完成後fastlane目錄下就會多出一個名爲actions的文件夾,裏面存放的就是你自定義action

二、編輯自定義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
複製代碼

三、查看action描述

一樣,這裏先cd到組件庫的根目錄下執行,緣由是這個自定義action只存在當前根目錄下的fastlane中,其它fastlane的非自定義的action就不用在當前根目錄下操做~

fastlane action remove_git_tag
複製代碼

查看具體描述

四、測試執行

先來看看當前組件庫已存在的tag

git tag
複製代碼

已存在的tag

能夠看到,我是已經有一個0.1.1版本的了。這時咱們再來執行一次LXFUpdatePodTool航道

fastlane LXFUpdatePodTool tag:0.1.1 specName:LXFMain
複製代碼

自動清除

5、工具拿走

LXFUpdatePodTool 已經傳到個人GitHub上,須要的同窗就拿走吧,順手給個Star咯 Orz

微信公衆號
相關文章
相關標籤/搜索