天天看點

iOS自動化部署方案Jenkins Fastlane code.aliyun 蒲公英 appStore

使用初衷

公司産品版本比較多,很多版本都需要獨立化部署。導緻産生了每個位址需要打包,每次打包就是一件麻煩的事情,常常一下午的時間過去了卻都浪費在打包這件事情上了。So….研究了下Fastlane。爬了很多坑。寫出來讓大家參考下,遇到問題了可以私信我。盡我所能幫助你。

基礎名詞

  • Ruby,一種簡單快捷的面向對象(面向對象程式設計)腳本語言
  • RVM是一個指令行工具,它允許您輕松地安裝,管理和使用從解釋器到多組gems多個ruby環境。
  • Gems RubyGems簡稱gems,是一個用于對 Ruby元件進行打包的 Ruby 打包系統。例如經常用的cocoapods就需要 gem 來管理。
  • Fastlane是Felix Krause大神寫的fastlane是一套使用Ruby寫的自動化工具集,用于iOS和Android的自動化打包、釋出等工作。
  • pgyer/fir 第三方釋出測試平台。

Fastlane 安裝初始化

iOS自動化部署方案Jenkins Fastlane code.aliyun 蒲公英 appStore
  • 確定你已經安裝了最新版本的Xcode指令行工具:
  • 選擇你的安裝方法:推薦使用RubyGems 安裝【不出問題就直接進行,最後指出問題點】
方法 os支援 描述
Homebrew 蘋果系統 brew cask install fastlane
安裝程式腳本 蘋果系統 下載下傳zip檔案。然後輕按兩下install腳本(或在終端視窗中運作)。
RubyGems 帶有Ruby 2.0.0或更高版本的macOS或Linux sudo gem install fastlane -NV

- 初始化

安裝完畢後,在終端進入到你的項目目錄下。初始化fastlane

fastlane init
           

按照提示輸入開發者賬号(付費賬号) 輸入Bundle Identifier 用于初始化配置,後期可在配置檔案改。随便輸入

根據提供的資訊,fastlane會自動為您生成一個配置。\

您可以看到新建立的./fastlane目錄,包含Appfile和Fastfile檔案。

最有趣的檔案是fastlane/Fastfile,其中包含分發您的應用程式所需的所有資訊。\

這樣就完成了初始化

蒲公英插件安裝

初始化完畢後直接在終端輸入

//fastlane fastlane search_plugins//列出可用插件
fastlane add_plugin pgyer//安裝插件
           
iOS自動化部署方案Jenkins Fastlane code.aliyun 蒲公英 appStore

插件安裝成功\

./fastlane目錄下會生成Pluginfile的一個檔案。\

插件安裝不成功,就是fastlane安裝的有問題。

配置Fastlane

檔案名 描述
Appfile 從 Apple Developer Portal 擷取和項目相關的資訊 詳情
Fastfile 核心檔案,存放lane任務
Deliverfile deliver的配置檔案,從 iTunes Connect 擷取和項目相關的資訊詳細
metadata 同步iTC中的中繼資料
screenshots 同步iTC中的截圖

- #### fastlane工具集是配置fastlane最重要的

檔案名 描述
match 證書和配置檔案管理工具會重置證書,推薦新項目使用。����������
cert 自動建立管理iOS代碼簽名證書,會去自動建立證書,永遠不會撤銷現有的證書。如不能建立會報錯。
sigh 用來建立、更新、下載下傳、修複Provisioning Profile的工具
gym 自動化編譯打包工具.shenzhen的代替品.����������
pem 自動生成、更新推送配置檔案
produce 如果你的産品還沒在iTunes Connect(iTC)或者Apple Developer Center(ADC)建立,produce可以自動幫你完成這些工作
deliver 自動上傳截圖,APP的中繼資料,二進制(ipa)檔案到iTunes Connect
snapshot 自動截圖(基于Xcode7的UI test)
frameit 可以把截的圖檔自動套上一層外邊框
pilot 管理TestFlight的測試使用者,上傳二進制檔案
boarding 建立一個添加測試使用者界面,發給測試者,可自行添加郵件位址,并同步到iTunes Connect(iTC)
scan 自動運作測試工具,并且可以生成漂亮的HTML報告
spaceship 為pilot,boarding和deliver等工具提供和 iTC 和 ADC 的互動API。spaceship本來是個獨立的項目,後來被Fastlane收編進來
WatchBuild 是一個獨立的iTC監控工具,開啟WatchBuild可以監控iTC上的檔案狀态,彈出MacOS自帶的Notification
supply Android自動上傳到Google Play工具(如果有時間,我想把國内提供API的Android Store都寫個插件自動上傳,這個問題從10年我剛開始工作就覺得是個痛點)
screengrab Android的自動截圖工具

關于fastfile:

  • 裡面存放了很多lane,每個lane相當于按順序執行的工作流。每個lane可以存放多個action,action可以看做具體的執行動作
  • 生命周期
執行順序 方法名 說明
1 before_all 在執行 lane 之前隻執行一次
2 before_each 每次執行 lane 之前都會執行一次
3 lane 自定義的任務
4 after_each 每次執行 lane 之後都會執行一次
5 after_all 在執行 lane 成功結束之後執行一次
6 error 在執行上述情況任意環境報錯都會中止并執行一次

- 任務定義

定義 是否必須 說明 備注
desc false 方法描述 可多次使用打到換行的目的
name true 方法名 符号化的方法名
options false 方法參數 傳回 Hash 類型
task true 方法主體 參考 ruby 的方法代碼且支援 ruby 代碼

- 一個簡單的lane

lane :deploy do
  # 執行 pod instasll
  cocoapods
  # 執行 carthage bootstrap
  carthage
  # 增加build版本号
  increment_build_number
  # 編譯代碼
  gym
  # 釋出到Apple Store
  deliver(force: true)
end
           
  • fastlane示例
  • 這個是我自己 配置到蒲公英的。同時導出ipa到./build檔案夾下,以版本号和打包時間命名。這樣就保留了每一版本包了。

隻需要項目根目錄下執行即可

fastlane topgyer desc:更新内容
           
desc "上傳到測試版本到蒲公英"
  desc "生成本地版本"
  lane :topgyer do|option|

    #自動增加build
    # increment_build_number

    #自動生成證書
    cert

    #自動生成配置檔案
    # sigh(force: true)//我使用的是手動配置關閉這個。如需自動則打開即可

    #gym配置,打包輸出。

    #fastlane gym --export_method ad-hoc
    #fastlane gym --export_method enterprise
    #fastlane gym --export_method app-store
    scheme_name = "xxxx"//應用名詞

    #擷取version和build版本号
    version = get_info_plist_value(path: "./#{scheme_name}/Info.plist", key: "CFBundleShortVersionString")
    build = get_info_plist_value(path: "./#{scheme_name}/Info.plist", key: "CFBundleVersion")

    #導出路徑
    output_directory = "./build"

    #導出名稱
    output_name = "#{scheme_name}_#{version}_#{build}_#{option[:desc]}_#{Time.now.strftime('%Y%m%d%H%M%S')}.ipa"

    gym(
      export_method: "enterprise",//企業賬号
      scheme: scheme_name, //名詞
      clean: true,//是否清理上次編譯
      output_directory: output_directory,//導出路徑
      output_name: output_name//導出名詞
     )

    pgyer(api_key: "1212121", user_key: "121212", update_description: "#{option[:desc]}")//蒲公英設定檢視key

  end
           
  • 手動配置證書。 fastlane初始化Gym fastlane gym會生成一個Gymfile的檔案。增加下面代碼,同時不要使用自動生成配置檔案\

    sigh(force: true)

export_options(
     provisioningProfiles: { 
    "com.xxx.xxx" => "profilesName",
    "com.xxx.xxxxxx" => "profilesName1"
  })
           
  • scheme 設定

    沒有在gym或者fastfile寫應用的名字的話。打包的時候會自動檢測目前目錄下的檔案。列出來供你選擇。\

    也可以設定一下在gym中直接指派,或者fastfile中增加即可。

問題彙總

使用過程中出現了很多問題,大部分問題都已經有人躺過水了,是以有問題先去看看issues

問題 解決方案
ruby -v 版本低于2.0.0 gem版本不對 請更新ruby請更新gems
cocoapods沒有放到Gemfile中 Gemfile檔案中增加cocoapods
fastlane init 提示sudo 請檢查ruby路徑。如果沒問題請檢查user目錄下.bash_profile。環境變量設定是否有效。export PATH=” HOME/.fastlane/bin: PATH”
如果初始化成功 其他的問題大部分都是證書問題了。

如需轉載請備注簡書位址

http://www.jianshu.com/u/bee103cd1f97

不懂的可以Q719251357

參考

https://whlsxl.github.io/fastlane1/