fastlane使用說明書

更新節點:2019-05-15

由于fastlane更新頻繁,已更新到 2.105.2 2.122.0

更新內容:fastlane新變化、fastlane新問題、fastlane遺留問題解決

2020-04-21 更新

大部分細節都類似,有一個繞過兩步驗證的更新一下, 其實你開一個有上傳權限的子賬號 就可以繞過兩步驗證,子賬號沒有強制要求兩步驗證。

05-15新版本內容變化,大致沒太多改動,一些新細節整理一下

1、用swift初始化Fastlane (beta)

1、To have your Fastfile configuration written in Swift (Beta) DOC

看描述就很清楚知道,這是使用swift來替代之前的ruby編寫腳本文件,縮減學習成本, 只要你懂swift就可以寫lane去跑對應的事件。

2、Open the file located at [project]/fastlane/swift/FastlaneRunner/FastlaneRunner.xcodeproj to configure your lanes in Fastfile.

其實本質上就是一個工程,如上,官方在fastlane目錄下放置了對應swift工程,我們可以通過工程進行lanes的開發。簡單測試了一下,lane被具象化為一個對象,所有你希望可以終端執行的lane,swift方法名以Lane結尾就可以:myLane、yourLane。

fastlane init swift

得到的fastfile(選擇了自動提示的 Automate beta distribution to TestFlight):

import Foundation

class Fastfile: LaneFile {

    func betaLane() {
    desc("Push a new beta build to TestFlight")
        incrementBuildNumber(xcodeproj: "xxx.xcodeproj")
        buildApp(workspace: "xxx.xcworkspace", scheme: "xxx")
        uploadToTestflight(username: "xxx@xx.com")
    }
}

3、Run fastlane <laneName> in your terminal to execute fastlane.

終端命令操作沒有太大改變, lane調用的時候可以忽略尾部后綴Lane。 參數傳遞方式如下:

fastlane [lane] key:value key2:value2
fastlane deploy submit:false build_number:24

class Fastfile: LaneFile {
    func deployLane(withOptions options:[String: String]?) {
        // ...
        if let submit = options?["submit"], submit == "true" {
            // Only when submit is true
        }
        // ...
        incrementBuildNumber(buildNumber: options?["build_number"])
        // ...
    }
}

2、Running Tests

run_tests action ,具體詳情可以 執行 fastlane action run_tests 查看??梢耘浜螩I執行單元測試,并且還可以提交測試結果到一些平臺: fastlane actions.

3、Deployment

打包具體變化不大,原來的actions 做了一些Alias (對安卓的支持力度加大,很多東西需要區分)

gym => build_ios_app | build_app

gradle => build_android_app

Actions列表

4、 關于兩步驗證的問題

老樣子,沒有什么進步,依然是specific password 和cookies 進行一個月的保存,還是需要每個月更新。

Two-Step

用手機再注冊一個蘋果賬號(不要通過appid網站注冊),把這個賬號掛在主賬號下面作為子賬號,并且開通權限,這樣就默認不會又兩步驗證。


fastlane 介紹

fastlane是用Ruby語言編寫的一套自動化工具集和框架,每一個工具實際都對應一個Ruby腳本,用來執行某一個特定的任務,而fastlane核心框架則允許使用者通過類似配置文件的形式,將不同的工具有機而靈活的結合在一起,從而形成一個個完整的自動化流程。比如我需要完成一套發布流程:

#發布到AppStore

lane :release do
  #增加build版本號,需要先配置build setting
  increment_build_number
  #pod資源更新
  cocoapods
  #打包
  gym
  #發布到AppStore
  deliver(force: true)
  #發布testflight測試
  testflight
end

依賴環境:

  • Xcode7 + (本文:xcode 9.3)
  • macOS or Linux with Ruby 2.0.0 + (本文:ruby 2.4.0 )

本文版本:

fastlane版本:2.53.1 已更新到 2.105.2

文檔地址:

Doc

安裝:

[sudo] gem install fastlane

如果用的是mac自帶的ruby,需要 sudo權限
使用: sudo gem install fastlane

如果報錯:ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/commander 
使用: sudo gem install -n /usr/local/bin fastlane

初始化:

在項目根目錄下,初始化Fastlane:

fastlane init

新版本安裝的時候出現了下面的分支選擇,按要求選擇就行

1. ??  Automate screenshots
2. ?????  Automate beta distribution to TestFlight (自動testfilght型配置)
3. ??  Automate App Store distribution (自動發布型配置)
4. ??  Manual setup - manually setup your project to automate your (需要手動配置內容)

fastlane操作改變后我們再了解一下有哪些配置文件:

Appfile: 存儲有關開發者賬號相關信息

Fastfile: 核心文件,主要用于 命令行調用和處理具體的流程,lane相對于一個方法或者函數

Deliverfile: deliver工具的配置文件
metadata: 元數據文件夾

Matchfile: Match操作對應的配置文件

screenshots: 截圖文件夾

除開手動配置項,fastlane 會要求填寫Apple ID,選擇你的Team(如果有多個) 然后fastlane會自動檢測當前目錄下項目的App Name和App Identifier、Project。然后自行確認并按流程執行。

常用命令:

  • fastlane actions: 展示所有有效action列表
  • fastlane action [action_name]: 展示一個action的詳細說明,使用方法等
  • fastlane lanes: 展示fastfile中的所有lane
  • fastlane list: 展示fastfile中的所有的有效的lane
  • fastlane new_action: 創建一個新的action
  • fastlane env: 打印fastlane、ruby環境,一般提bug到issue的時候會要求提供

生命周期:

執行順序 方法名 說明
1 before_all 在執行 lane 之前只執行一次
2 before_each 每次執行 lane 之前都會執行一次
3 lane 自定義的任務
4 after_each 每次執行 lane 之后都會執行一次
5 after_all 在執行 lane 成功結束之后執行一次
6 error 在執行上述情況任意環境報錯都會中止并執行一次

其他:

1.如果Deliverfile、screenshots和metadata沒有自動生成,通過deliver init 可以重新初始化

2.fastlane的配置會要求輸入開發者賬號密碼,通過spaceship與Apple交互,并會產生一份有效期一個月的cookies文件:文件地址: ~/.fastlane/spaceship/[email]/cookie (兩步驗證問題)

3.Matchfile: match 這個action的配置文件,fastlane match init 自動生成,存放git地址等

fastlane 使用

lane的使用

lane是fastfile中的方法定義標簽,可以理解為swift中定義一個函數,前面的 func。fastlane 都是基于ruby,所以fastfile中也是使用ruby語法的。

定義一個簡單的無參lane

lane :package
    puts "這是一個lane"
end

定義一個帶參的lane,在fastfile中option類似于一個字典集。我們可以通過 option[:configuration] 取其中value

 lane :package do |option| 
    configuration = option[:configuration]
    puts configuration
 end
 
 //lane的調用
 package(configuration: 'Release', export_method: 'ad-hoc')

Action

除開我們自定義fastfile中的方法,fastlane還提供了很多已經寫好的獨立的方法庫,也就是Actions。

Action是Fastlane自動化流程中的最小執行單元,直觀上來講就是Fastfile腳本中的一個個命令,而這些命令背后都對應一個用Ruby編寫的腳本。

到目前為止,Fastlane的工具集大約包含180多個Action,基本上涵蓋了打包,簽名,測試,部署,發布,庫管理等等移動開發中涉及到的內容。

fastlane actions : 查看action列表

fastlane action  action_name:查看具體action 描述

常用Action

Action列表文檔: Actions

我們常用的主要包括下面幾部分,其他action的使用可以參考官方文檔:

  • scan => 自動運行測試工具,并且可以生成漂亮的HTML報告
  • match => 一個新的證書和配置文件管理工具。把所有需要用到的證書傳到git私有庫上,任何需要配置的機器直接用match同步回來就不用管證書問題了
  • gym => Fastlane家族的自動化編譯工具,和其他工具配合的非常默契
  • deliver => 自動上傳截圖,APP的元數據,二進制(ipa)文件到iTunes Connect
  • pilot => 管理TestFlight的測試用戶,上傳二進制文件
  • spaceship => 為pilot,boarding和deliver等工具提供和 iTC 和 ADC 的交互API。spaceship本來是個獨立的項目,后來被Fastlane收編進來 非官方的iTunes Connect JSON API的文檔

常用Action使用

scan

release情況下無法正常運行scan,需要手動去Build Setting中更改enable Testability 在release 下的狀態,改為 yes才可以運行。但是官方不建議做release下開啟,Test一般在development configuration 下執行。

match

一個新的證書和配置文件管理工具。它會把所有需要用到的證書傳到git私有庫上,任何需要配置的機器直接用match同步回來就不用管證書問題了。保證大家用的都是同一份。不過我們一般都是一臺機器需要用到distribution證書,所以意義不大。

1.match只認識通過match方式創建的pp文件 證書,其他方式創建的不予理會。
2.使用match 需要先撤銷現在的證書。
3.如果蘋果端的證書,pp文件已刪除,那么遠端git上的文件也會失效,并且在重新match的時候會失敗,好像就只能刪光 git端內容,重新match一遍。

常用參數:
git_url : 指定對應git地址
git_branch : 指定對應branch
type :請求文件類型, appstore, adhoc, development, enterprise
app_identifier : app_bundle_identify
clone_branch_directly : 只更新對應branch,只有在存在這個branch時才生效
force_for_new_devices : 如果設備devices列表更新了,就強制更新配置概要文件
verbose :打印出額外的信息和所有的命令

gym

常用參數:
scheme :指定打的哪個scheme
project :指定project (未使用cocopods)
workspace :指定workspace (使用cocopods)
clean :打包前clean
xcargs : 附加一些參數傳遞給xcodebuild 如: xcargs: 'DEBUG_INFORMATION_FORMAT="dwarf-with-dsym"',
export_method :出包方法 app-store, ad-hoc, package, enterprise, development
configuration : 指定構建App的配置  Release、Debug、自定義
output_directory : 輸出目錄
output_name :輸出名稱
include_symbols :是否包含調試符號
include_bitcode :是否開啟bitcode

純swift工程打包,在非appstore證書下簽出來的包都缺少一個swiftsupport文件夾,里面放的是swift的支持庫。

deliver

用于直接發包到appstore,可以選擇跳過圖片和元數據上傳,只提包,后面再配圖和數據:如下 skip_screenshots 和  skip_metadata 參數
 deliver(
    ipa: "#{OUTPUT_DIRECTORY}" + "/" + "#{IPA_NAME}",
    skip_screenshots: true,
    skip_metadata: true
)

pilot

用于發布testflight內部測試,屬于testflight action的別名

常用參數:
ipa :要提交的包地址
team_name、team_id :如果有多個team 用于區分team
skip_waiting_for_build_processing : 在提交完成后的等待是否跳過,一般跳過
changelog
testflight(
  ipa : '../xx.ipa'
)

spaceship [常見問題官方解釋]

spaceship其實一般fastfile中不會使用到,但是由于涉及到與ADC的通信,會出現一些奇奇怪怪的問題,所以對它也要有一點了解。

當第一次使用fastlane安裝的時候,會要求輸入賬號密碼核實你的身份來連接ADC,這個時候你提供的登錄驗證會處理為會話存到 spaceship 的 cookie,會話大概一個月有效期,一個月后失效,通常我們只有在打包失敗后才會發現這個問題。

上面提到的這些action都是常用的,正常打包流程必不可少的部分,還有一些常用于輔助作用的Action

  • resign :重新簽名

    fastlane sigh resign dev.ipa --signing_identity "證書ID" -p “dev.mobileprovision"
    
  • get_info_plist_value :獲取info.plist中得某個key的值

  • set_info_plist_value :設置info.plist中得某個key的值

  • increment_build_number :自動遞增項目build號

  • increment_version_number :自動遞增項目版本號

  • get_version_number: 獲取版本號(新fastlane版本不能再添加scheme參數,只需要target即可)

以上兩個都需要先配置好xcode, 配置文檔

自定義Action

由于開發需求各自不同,已有的action不滿足的情況下,Fastlane支持定義自己的Action。Fastlane為我們提供了現成的模板,即使你對Ruby的語法不熟悉,也沒有關系,Fastlane是開源的嘛,可以直接下載源碼看看別人的Action是怎么寫的就知道了,我們可以在這個目錄下找到所有的Action文件:

Action_rbs

假設,我們針對pod的執行創建一個action來針對下面三種情況的執行

pod install --no-repo-update (避免master repo的每次更新耗時)
pod update --no-repo-update (避免master repo的每次更新耗時)
pod repo update XXX (私有repo的更新)

自定義Action的流程大約如下,首先,我們在終端中執行命令:

fastlane new_action

然后根據提示,在命令行中敲入action的名字pod,然后Fastlane會在當前目錄的actions文件夾中幫我們創建了一個pod.rb的Ruby文件 (此處只有部分代碼)

module Fastlane
  module Actions
    module SharedValues
      POD_CUSTOM_VALUE = :POD_CUSTOM_VALUE
    end
    class PodAction < Action
      def self.run(params)
        UI.message "Parameter API Token: #{params[:api_token]}"
      end
      ......
      def self.available_options
        # Define all options your action supports. 
      end
      ......

可以看到,自定義的Action都是隸屬于Fastlane/Actions這個module,并且繼承自Action這個父類。雖然模板中的內容還挺多,不過不用擔心,大部分內容都是一些簡單的文本描述,對于我們來說只需要重點關注這兩個方法就行:

  1. self.run方法:這里放置的是實際的業務處理代碼。
  2. self.available_options方法:這里聲明需要對外暴露出的參數,沒有聲明的參數在執行過程中無法使用。

最終寫完結果如下:

module Fastlane
  module Actions
    module SharedValues
      POD_INSTALL_CUSTOM_VALUE = :POD_INSTALL_CUSTOM_VALUE
    end
    class PodInstallAction < Action
      def self.run(params)
        repo = "-no-repo-update"
        command = []
        command << "pod install"
        if params[:repo_update]
          repo = "--repo-update"
        end
        command << repo
        if params[:verbose]
          command << "--verbose"
        end
        result = Actions.sh(command.join(' '))
        UI.success(command.join(' ') + " Successfully ")
        return result
      end

      def self.description
        "pod install action"
      end
      def self.details
        "verbose / repo-update"
      end
      def self.available_options
        [
        FastlaneCore::ConfigItem.new(key: :verbose,
                                       description: "Allow output detail in console",
                                       optional: true,
                                       is_string: false,
                                       default_value: false),
          FastlaneCore::ConfigItem.new(key: :repo_update,
                                       description: "Allow output detail in console",
                                       optional: true,
                                       is_string: false,
                                       default_value: false)
        ]
      end
      def self.output
      end
      def self.return_value
      end
      def self.authors
        ["yang"]
      end
      def self.is_supported?(platform)
        platform == :ios
      end
    end
  end
end

Action引用機制

遠程引用

# 遠程Git引用:
import_from_git(url: 'https://github.com/xilankong/ruby', branch: 'master')
# 復寫發布項目的lane
lane :do_deliver_app do |options|
  # ...
end

本地引用

import "../GeneralFastfile"
actions_path '../custom_actions_folder/'
lane :appstore do |options|
  # ...
end

Plugin

我們在使用Fastlane的時候常常會遇到這樣的場景:

  1. 我的自定義Action需要在多個內部項目中使用
  2. 我覺得這個自定義Action很不錯,想共享給其他的團隊使用

此時,拷貝粘貼雖然可以解決問題,但并不是一個聰明的方案。將Action發布到Fastlane的官方倉庫倒是一個不錯的選擇,但是官方倉庫本身對Action的要求比較高,并不會接收非通用性的Action,即使接收了,整個發布周期也會比較長,而且以后無論是升級還是Bug修復,都依賴Fastlane本身的發版,大大降低了靈活性。

所以從1.93開始,Fastlane提供了一種Plugin的機制來解決這種問題。大家可以理解為:Plugin就是在Action的基礎上做了一層包裝,這個包裝巧妙的利用了RubyGems這個相當成熟的Ruby庫管理系統,所以其可以獨立于Fastlane主倉庫進行查找,安裝,發布和刪除。

我們甚至可以簡單的認為:Plugin就是RubyGem封裝的Action,我們可以像管理RubyGems一樣來管理Fastlane的Plugin。

但是,如果為了多項目共享任務,或者共享fastfile,可以通過Action的遠程引用機制。所以Plugin不過多介紹。

持續化打包還需要的Action

1.monkey

2.ftp 提交遠程服務器 (已解決)

3.測試日志解析

4.jira提交bug

5.自動打framework (已解決)

常見問題

1、gem源問題

gem ruby源已更新為 https://gems.ruby-china.com,本機版本2.7.7

$ gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
$ gem sources -l
https://gems.ruby-china.com
# 確保只有 gems.ruby-china.com

2、ruby版本必須高于2.0,測試本機2.0也無效,所以最好2.0+

以下是之前2.3.1正常安裝的時候的操作:

rvm安裝 
curl -L get.rvm.io | bash -s stable  
安裝成功后、啟用rvm
source ~/.bashrc  
source ~/.bash_profile  
測試安裝結果
rvm -v
升級ruby
rvm install 2.3.1
查看安裝的所有ruby
rvm list
切換ruby
rvm use 2.3.1 
設置rvm默認版本
rvm --default 2.3.1

fastlane 安裝:
sudo gem install -n /usr/local/bin fastlane

在10.13上安裝ruby 2.4.0的時候出現一個問題,由于ssl3的無問題,ruby鏡像一直無法下載

No binary rubies available for: osx/10.13/x86_64/ruby-2.4.0.
ruby curl: (35) error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

初步懷疑ssl問題,但具體解決方案沒找到

選擇離線安裝的辦法

離線安裝Ruby

3、Jenkins 環境 RVM未激活問題

比如Mac自帶的Ruby版本不符合你的需求,一般會使用RVM重新裝一個Ruby版本,但是這樣導致
Jenkins中獲取不到在目標服務器安裝的最新RVM 和 ruby、fastlane、cocoapods等

解決方案 :

~/.bashrc 、~/.zshrc 、~/.zlogin 內容

PATH=$PATH:$HOME/.rvm/bin
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM 

在jenkins執行腳本內 啟用RVM:

source $HOME/.rvm/scripts/rvm
或者 source ~/.bashrc

解決辦法二:

新版本的Jenkins可以安裝 RVM 插件,具體可以百度,然后配置里填寫上你打包機當前用戶配置的RVM版本即可

4、關于開啟兩步驗證如何全自動化問題

開啟兩步驗證后,提交testfilght或者appstore會出現如下提示,要求手動確認并 輸入6位code

Two Factor Authentication for account 'xxxxx@xx.com' is enabled
If you're running this in a non-interactive session (e.g. server or CI)
check out https://github.com/fastlane/fastlane/tree/master/spaceship#2-step-verification
Please enter the 6 digit code:

這樣明顯影響全自動化提交操作。

解決方案:

fastlane提供的兩步驗證解決方案:

1.訪問 https://appleid.apple.com/account/manage 
2.生成一個 APP-SPECIFIC PASSWORDS,保留生成的特殊密碼
3.使用環境變量提供這個密碼給fastlane:  FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD
4.執行fastlane spaceauth -u user@email.com,生成session cookie。
5.通過環境變量FASTLANE_SESSION 提供session cookies。

配置地方:

打包機:~/.bash_profile 中,配置 FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD 和 FASTLANE_SESSION

例如:
export FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD=特殊密碼
export FASTLANE_SESSION=session cookie

本機使用的是Item2 /bin/zsh 所以配置在 ~/.bash_profile
Jenkins:配置對應環境變量即可

還有一個小伙伴告知另一個配置方式
ENV["FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD"] = "xxxxxx"
這個和環境變量配置是一個意思,但是涉及密碼寫在配置文件里面

但是,本文測試一個月后發現依然失效,最后選擇的方案是開設一個未開啟兩步驗證的賬號作為開發賬號的子賬號專門用來打包。
如有不過期方式,歡迎補充

6、fastlane gym produces error: method `to_plist' not defined in Array #11503

在執行gym的時候出現如上問題,或者跑fastlane action gym的時候出現

解決辦法:終端命令
rvm @global do gem uninstall fastlane 
rvm all do gem uninstall fastlane
gem uninstall fastlane
gem install fastlane
sudo gem install fastlane  (jenkins權限問題)

例子:
rvm @global do gem uninstall fastlane

Select gem to uninstall:
 1. fastlane-2.47.0
 2. fastlane-2.49.0
 3. fastlane-2.51.0
 4. fastlane-2.53.1
 5. fastlane-2.55.0
 6. fastlane-2.57.2
 7. fastlane-2.58.0
 8. fastlane-2.62.1
 9. fastlane-2.85.0
 10. fastlane-2.86.2
 11. All versions
> 11
Successfully uninstalled fastlane-2.47.0
Successfully uninstalled fastlane-2.49.0
Successfully uninstalled fastlane-2.51.0
Successfully uninstalled fastlane-2.53.1
Successfully uninstalled fastlane-2.55.0
Successfully uninstalled fastlane-2.57.2
Successfully uninstalled fastlane-2.58.0
Successfully uninstalled fastlane-2.62.1
Successfully uninstalled fastlane-2.85.0
Remove executables:
    bin-proxy, fastlane

in addition to the gem? [Yn]  y
Removing bin-proxy
Removing fastlane
Successfully uninstalled fastlane-2.86.2
[10:42:40] young:~ $ rvm all do gem uninstall fastlane

Select gem to uninstall:
 1. fastlane-2.80.0
 2. fastlane-2.85.0
 3. All versions
> 3
Successfully uninstalled fastlane-2.80.0
Remove executables:
    bin-proxy, fastlane

in addition to the gem? [Yn]  y
Removing bin-proxy
Removing fastlane
Successfully uninstalled fastlane-2.85.0
[10:42:55] young:~ $ gem uninstall fastlane
[10:43:01] young:~ $ gem install fastlane
Fetching: fastlane-2.86.2.gem (100%)
Successfully installed fastlane-2.86.2
Parsing documentation for fastlane-2.86.2
Installing ri documentation for fastlane-2.86.2
Done installing documentation for fastlane after 23 seconds
1 gem installed

7、附錄一份簡單的fastfile文件,涉及到私密數據部分地方會符號代替, 與fastlane無關的部分會刪除,本文用的是Jenkins + fastlane + apphost ,以下提供部分fastfile文件、Jenkins shell、本地腳本fastlane.sh

fastfile 部分

#聲明

APP_NAME = “XXX”
WORKSPACE = “XXX.xcworkspace"
SCHEME = “XXX”
IPA_TIME = Time.now.strftime("%Y%m%d_%H%M")
OUTPUT_DIRECTORY = "packages"
APP_INFO_PLIST_PATH = ‘./XXX/Info.plist'
ENV_PREFIX=""
IPA_NAME = ""

platform :ios do
  #
  before_all do
       xcode_select "/Applications/Xcode.app"
       FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT = "40"
  end

  #debug包
  lane :iosDebug do
    ENV_PREFIX="debug_"
    EXPORT_METHOD = "development"
    package(configuration: "Debug")
  end

  #release包
  lane :iosRelease do
    ENV_PREFIX="adhoc_"
    EXPORT_METHOD = "ad-hoc"
    package(configuration: "Release")
  end

    #發布包
  lane :iosAppStore do
    ENV_PREFIX="appstore_"
    EXPORT_METHOD = "app-store"
    package(configuration: "Release")
  end

  #打包函數
  lane :package do |option|
      cocoapods
      PLIST_INFO_VERSION = get_version_number(target: "#{SCHEME}")
      PLIST_BUILD_VERSION = get_info_plist_value(path: "#{APP_INFO_PLIST_PATH}", key: 'CFBundleVersion')
      IPA_NAME = "#{ENV_PREFIX}" + "#{APP_NAME}_"  +  "#{IPA_TIME}_" + "#{PLIST_INFO_VERSION}" +"_#{PLIST_BUILD_VERSION}"+ ".ipa"

     #打包
     gym(
      scheme: "#{SCHEME}",
      export_method: "#{EXPORT_METHOD}",
      configuration: option[:configuration],
      output_directory: "#{OUTPUT_DIRECTORY}",
      include_symbols: true,
      include_bitcode: false,
      xcargs: 'DEBUG_INFORMATION_FORMAT="dwarf-with-dsym"',
      output_name: "#{IPA_NAME}",
      export_xcargs: "-allowProvisioningUpdates"
      )
      xcclean(
       workspace: "#{WORKSPACE}",
       scheme: "#{SCHEME}"
      )
      
  end

Jenkins部分腳本

#!/bin/bash -l
sh ./script/fastlane.sh "Debug"

fastlane.sh部分腳本

#解決ArgumentError - invalid byte sequence in US-ASCII錯誤
#修改終端語言、地區等國際化環境變量
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export PATH=$PATH:/usr/local/bin
#更換ruby環境,對應的修改有 打包機下面的  .bashrc  .zshrc .zlogin
source $HOME/.rvm/scripts/rvm #source ~/.bashrc

#解鎖keychain,是其它工具可以訪問證書,解鎖后設置keychain關閉時間為1小時, xxx為用戶名
security -v unlock-keychain -p "xxx" "/Users/xxx/Library/Keychains/login.keychain"
security set-keychain-settings -t 3600 -l "/Users/xxx/Library/Keychains/login.keychain"
/usr/local/bin/pod update --verbose --no-repo-update

# fastlane profile
if [[ $1 == "Debug" ]]; then
  fastlane iosDebug
elif [[ $1 == "Release" ]]; then
  fastlane iosRelease
elif [[ $1 == "TestFlight" ]]; then
  fastlane iosTestFlight
elif [[ $1 == "AppStore" ]]; then
  fastlane iosAppStore
fi
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 持續集成指的是,頻繁地(一天多次)將代碼集成到主干。它的好處主要有兩個。 (1)快速發現錯誤。每完成一點更新,就集...
    碼農甲閱讀 7,942評論 2 2
  • fastlane運行所需要的環境: OS X 10.9以上 Ruby 2.0 以上 Xcode 擁有一個開發者賬號...
    阿姣_0405閱讀 3,026評論 0 4
  • fastlane是一個自動化構建工具,主要包含測試、打包、發布等功能,它內部是由ruby實現的,是一款自動化非常高...
    wangzzzzz閱讀 6,566評論 3 19
  • 前言 在終端中執行fastlane lane_name之后,fastlane會去執行Fastfile中定義的同名l...
    wangzzzzz閱讀 1,831評論 6 8
  • 1. 前言 應公司項目要求,需要自動化打包不同App,為了避免重復性的工作和節省時間,以下是研究和學習Fastla...
    奮斗的蝸牛閱讀 11,405評論 5 16