最近體驗實踐了一遍自動打包工具 fastlane,記錄一下基本過程及碰到的問題。(純記錄貼,沒有實踐過的能夠看看碰到的問題部分,有經驗的前輩能夠瞅一眼疑問部分指點一下:)html
按文檔,在終端中依次運行如下命令:ios
安裝最新版本的 Xcode 命令行工具git
xcode-select --installgithub
安裝 fastlanexcode
# 使用 RubyGems sudo gem install fastlane -NV # 或者使用 Homebrew brew cask install fastlanebash
導航至項目目錄並運行app
fastlane initide
成功後輸出: 函數
查看項目目錄能夠看到如終端數據的提示,生成了 fastlane 目錄,包含兩個文件:Fastfile、Appfile。以及 Gemfile 和 Gemfile.lock。工具
主要爲配置 Appfile 及 Fastfile。
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 大體如:
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 時報錯
參考 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' 步驟發生錯誤
1. fastlane 中有 slack 的 Action 能夠在執行完成後自動發送通知消息,沒有找到 QQ/Wechat 的 Action,自定 QQ/Wechat Action 是否具備可行性?