fastlane 初體驗 01

最近體驗實踐了一遍自動打包工具 fastlane,記錄一下基本過程及碰到的問題。(純記錄貼,沒有實踐過的能夠看看碰到的問題部分,有經驗的前輩能夠瞅一眼疑問部分指點一下:)html

安裝及初始化

按文檔,在終端中依次運行如下命令:ios

  1. 安裝最新版本的 Xcode 命令行工具git

    xcode-select --installgithub

  2. 安裝 fastlanexcode

    # 使用 RubyGems sudo gem install fastlane -NV # 或者使用 Homebrew brew cask install fastlanebash

  3. 導航至項目目錄並運行app

    fastlane initide

成功後輸出: 函數

fastlane init 執行成功

查看項目目錄能夠看到如終端數據的提示,生成了 fastlane 目錄,包含兩個文件:FastfileAppfile。以及 GemfileGemfile.lock工具

配置

主要爲配置 AppfileFastfile

Appfile 主要爲配置一些通用信息,例如 app_identifier(Bundle Identifier)apple_id(Apple ID)。若是不配置,在執行命令時須要相關信息終端會提示並等待用戶輸入。若是開發者帳號歸屬於多個 team,須要指定 team_name 及 team_id,若是須要上傳到 App Store Connect,須要配置 itc_team_name 及 itc_team_id。還能夠爲不一樣的 lane(一個 lane 即爲一個打包動做命令集合)複寫爲不一樣的值,例如針對測試版本與生產版本作不一樣配置。

更多關於 Appfile 的配置可參考 Appfile 說明文檔

Fastfile 即爲具體配置不一樣 lane 行爲的地方。Ruby 不太熟,直觀理解起來,感受像是 fastlane 內置了一些腳本函數(稱爲 Action),各自完成不一樣的特定事務,例如最經常使用的 build_app - 見名知意爲編譯打包應用,也有如 get_certificates(獲取證書)/get_provisioning_profile(獲取配置文件)/get_push_certificate(獲取推送證書)等等。而後咱們在每個 lane 中按須要組合這些 Actions,也能夠在 lane 中調用其餘 lane。各 Action 有不一樣參數配置自定義行爲,例如 build_app 能夠配置 scheme/workspace/output_directory/output_name 等。

更多關於 Fastfile 的配置可參考 Fastfile 說明文檔

至於 lane 具體怎麼寫,如上面提到的像堆積木同樣組合各 Action。做爲一個 Ruby 塑料選手,大致上依葫蘆畫瓢。

Fastfile 大體如:

Fastfile 文件

Tip: 最終在 fastlane 文件夾下會生成一個 README.md 文件,至關因而 doc 文檔,記錄着各 lanes 名稱及描述,還有對應的 fastlane 命令,能夠直接 copy 對應的到終端中執行便可。

最後在終端中導航至項目所在目錄後執行相應 fastlane 命令便可。

目前基本能達到自動打包發佈到蒲公英及提交到 App Store Connect 的預期效果,還有更多進階使用方式,例如配置環境變量(只試過配置 FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD,由於不想明文寫在配置文件裏),以及使用插件(只在上傳到蒲公英時使用了 fastlane add_plugin pgyer ), 還有自定義 Action 還沒有實踐過,最後還有持續集成工具的配合,有緣時 有業務須要時實踐後再整理記錄。

碰到的問題

1. 安裝 fastlane 時提示錯誤 Failed to build gem native extension

錯誤提示:

ERROR:  Error installing fastlane:
	ERROR: Failed to build gem native extension.

    Building has failed. See above output for more information on the failure.
extconf failed, exit code 1

Gem files will remain installed in /Library/Ruby/Gems/2.3.0/gems/unf_ext-0.0.7.6 for inspection.
Results logged to /Library/Ruby/Gems/2.3.0/extensions/universal-darwin-18/2.3.0/unf_ext-0.0.7.6/gem_make.out
複製代碼

查找到類似的 issue 338。這個 issue 是安裝 nokogiri 有問題,推斷個人是與 universal-darwin-18 有關?在 issue 裏檢索一下,發現一個被自動關閉的 issue 13647,然而並無提出解決方法,彷佛與 macOS Mojave 系統有關,最後一個評論是建議完善文檔說明這個問題並說他已經放棄使用 fastlane 了,能夠說是給 newbie 當頭一棒。笑着活下去.jpg

再看看剩與幾個相關 issue,終於在這個 issue 12905 找到可行方法,原來是須要手動指定 Xcode 使用的 Command Line Tools 版本。

2. 使用 Action: get_build_number 時報錯

fastlane_get_build_number報錯

參考 QA1827 提示配置 Xcode Build Settings 中的 Current Project Version & Versioning System,及 info.plist 中的 CFBundleVersion & CFBundleShortVersionString,以使 agvtool 正常工做。

3. 使用 Action get_info_plist_value path 參數無效

在配置 output_name 時想自定義名字後加上 version 及 build 號方便區分。get_build_number 不像 get_version_number 能夠指定 target,轉而使用經過Action get_info_plist_value(path: value, key: value) 獲取對應 Info.plist 中的 CFBundleVersion。 結果提示參數無效,原來是需傳入文件相對路徑(不能像文檔中只寫 plist 文件名,若是 plist 不是放在項目根目錄下須要寫相對路徑),客戶端開發思惟:爲何 fastlane 不是提示文件找不到,直接提示參數無效。

4. Running script 'Run Script' 步驟發生錯誤

這個問題反覆嘗試後發現手動 clean 一下,再執行就 OK 了。有點詭異:)

疑問

1. fastlane 中有 slack 的 Action 能夠在執行完成後自動發送通知消息,沒有找到 QQ/Wechat 的 Action,自定 QQ/Wechat Action 是否具備可行性?

NeXT STEP

參考

  1. Getting started with fastlane for iOS
  2. 使用 Fastlane 上傳 App 到蒲公英
相關文章
相關標籤/搜索