Fastlane 安裝及使用

一、安裝 Fastlane

如果尚未安裝Fastlane,打開終端,在根目錄下執(zhí)行,進(jìn)行安裝
sudo gem install fastlane

二、初始化 Fastlane

  1. 先切換到項(xiàng)目目錄中
    cd ....
  2. 執(zhí)行如下命令,初始化Fastlane
    fastlane init
  3. 選擇想要Fastlane執(zhí)行的操作。
    選擇manual setup,應(yīng)該是4

三、其他準(zhǔn)備工作

  • 去AppStore配置秘鑰,以便連接AppStore時免登錄

  1. 開發(fā)者中心的App Store Connect下選擇“用戶和訪問” - “集成” - 秘鑰。
    在這里獲取所需要的Issuer ID、秘鑰ID,將秘鑰文件xxx.p8下載下來保存好。
  2. xxx.p8文件放入與fastlane文件夾同級的文件夾中
  • 配置env文件

  1. 將終端切到fastlane文件夾
  2. 執(zhí)行touch .env.default, 生成.env.default文件
  3. 執(zhí)行open -a TextEdit .env.default打開.env.default文件
  4. 編輯.env.default文件,將以下內(nèi)容粘貼至文件中,并用項(xiàng)目的真實(shí)參數(shù)替換“=”后的內(nèi)容
SCHEME=工程名
BUNDLE_ID=BundleId
WECOM_WEBHOOK_KEY=機(jī)器人key
DEVELOPMENT_PROFILE_NAME=測試描述文件名
PGYER_APP_KEY=蒲公英Appkey
STAGING_PROFILE_NAME=發(fā)布描述文件名
APP_STORE_CONNECT_API_KEY_KEY_ID=在AppStore中配置的秘鑰的秘鑰Id
APP_STORE_CONNECT_API_ISSUER_ID=在AppStore中獲取的IssuerId
APP_STORE_CONNECT_API_KEY_FILEPATH=./在AppStore中下載的文件名.p8
  • 配置忽略文件

在.gitgnore中忽略掉敏感信息及打包文件
添加如下代碼

*.ipa
*.dSYM.zip
*.dSYM
*.lock
fastlane/*.xml
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/output
*.p8
.env.default

四、打包至蒲公英

1. 在項(xiàng)目目錄中執(zhí)行如下語句,將蒲公英插件添加到項(xiàng)目中,并自動更新 Pluginfile 和 Gemfile。

fastlane add_plugin pgyer

2. 配置 Fastfile

將如下代碼copy到Fastfile中

default_platform(:ios)

platform :ios do

    # 工程名字
    scheme = ENV["SCHEME"]
    # BundleId
    bundle_id = ENV["BUNDLE_ID"]
    # 機(jī)器人配置
    wecom_webhook_key = ENV["WECOM_WEBHOOK_KEY"]
    # 項(xiàng)目版本號
    version = get_version_number(xcodeproj: "#{scheme}.xcodeproj")
    build = get_build_number(xcodeproj: "#{scheme}.xcodeproj")

    # 蒲公英更新日志
    changeLog = <<~CHANGELOG
- 修復(fù)已知問題
    CHANGELOG

  desc "打包、上傳蒲公英并通知企業(yè)微信群"
  lane :debugToPgy do

    # 描述文件
    profile_name = ENV["DEVELOPMENT_PROFILE_NAME"]
    # 蒲公英配置
    pgyer_api_key = ENV["PGYER_APP_KEY"]
    # 蒲公英下載鏈接
    download_url = "將下載鏈接粘貼進(jìn)來"    #正常是可以從回調(diào)內(nèi)容中獲取的,但是配置沒成功,始終不好使,暫時寫死

    # 清理構(gòu)建
    clean_build_artifacts

    # 構(gòu)建 IPA 包
    gym(
      scheme: scheme,
      export_method: "development",
      export_options: {
        provisioningProfiles: {
          bundle_id => profile_name
        }
      },
      output_directory: "./fastlane/output/ipa",   # 指定 .ipa 的輸出文件夾
      output_name: "#{scheme}.ipa"   # 指定生成的 .ipa 文件名
    )

    # 上傳到蒲公英
    pgyer_info = pgyer(
      api_key: pgyer_api_key, 
      ipa: "./fastlane/output/ipa/#{scheme}.ipa",
      update_description: changeLog,
    )

    # 發(fā)送到企業(yè)微信信息
    weChatmessage = <<~WeChat
        # 新版本測試包:
        \n
        **版本號:** #{version} ( #{build} )
        \n
        **更新內(nèi)容:**
        --------------------------------
        #{changeLog}
        --------------------------------
        [點(diǎn)擊下載](#{download_url})
    WeChat

    # 企業(yè)微信通知
    sh %(
      curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=#{wecom_webhook_key}' \
      -H 'Content-Type: application/json' \
      -d '{
        "msgtype": "markdown",
        "markdown": {
          "content": "#{weChatmessage}"
        }
      }'
    )
  end
end
  • 參數(shù)解析:
  • scheme:工程名字
  • profile_name: 描述文件名字
  • pgyer_api_key:蒲公英的api key(在蒲公英平臺 - 用戶 - API信息中查看)
  • pgyer_user_key:蒲公英user key(在蒲公英平臺 - 用戶 - API信息中查看),新版不需要userkey了
  • wecom_webhook_key:企業(yè)微信 群機(jī)器人的key(首先要管理員添加一個群機(jī)器人)
  • export_method:描述文件類型(如果是測試描述文件則是"ad-hoc";如果是開發(fā)的描述文件則是development

3. 使用

在項(xiàng)目目錄中執(zhí)行如下語句,打包、上傳蒲公英并通知企業(yè)微信群
fastlane debugToPgy

五、打包至TestFlight

1. 配置 Fastfile

default_platform(:ios)

platform :ios do

    # 工程名字
    scheme = ENV["SCHEME"]
    # BundleId
    bundle_id = ENV["BUNDLE_ID"]
    # 機(jī)器人配置
    wecom_webhook_key = ENV["WECOM_WEBHOOK_KEY"]
    # 項(xiàng)目版本號
    version = get_version_number(xcodeproj: "#{scheme}.xcodeproj")
    build = get_build_number(xcodeproj: "#{scheme}.xcodeproj")

    # TestFlight更新信息
    testFlightLog = <<~TESTFLIGHTLOG
- 修復(fù)已知問題
    TESTFLIGHTLOG

  desc "打包、上傳TestFlight并通知企業(yè)微信群"
  lane :release do

    # 描述文件
    profile_name = ENV["STAGING_PROFILE_NAME"]

    # TestFlight外測鏈接
    testFlight_url = "發(fā)布外測版本的鏈接"

    # 清理構(gòu)建緩存
    clean_build_artifacts

    # 連接AppStore秘鑰
    app_store_connect_api_key(
      key_id: ENV["APP_STORE_CONNECT_API_KEY_KEY_ID"],
      issuer_id: ENV["APP_STORE_CONNECT_API_ISSUER_ID"],
      key_filepath: ENV["APP_STORE_CONNECT_API_KEY_FILEPATH"]
    )

    # 構(gòu)建 IPA 包
    gym(
      scheme: scheme,
      export_method: "app-store",
      export_options: {
        provisioningProfiles: {
          bundle_id => profile_name
        },
      output_directory: "./fastlane/testFlightOutput/ipa",   # 指定 .ipa 的輸出文件夾
      output_name: "#{scheme}.ipa"   # 指定生成的 .ipa 文件名
      }
    )
    
    # 上傳到 App Store Connect(僅 TestFlight)
    upload_to_testflight(
      skip_waiting_for_build_processing: true
    )

    # 發(fā)送到企業(yè)微信信息
    weChatmessage = <<~WeChat
        # 新版本 TestFlight 更新通知:
        \n
        **版本號:** #{version} ( #{build} )
        \n
        **更新內(nèi)容:**
        --------------------------------
        #{testFlightLog}
        --------------------------------
        \n
        內(nèi)部測試人員,請注意查收TestFlight更新推送!
        \n
        [外部測試下載鏈接](#{testFlight_url})
    WeChat

    # 企業(yè)微信通知
    sh %(
      curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=#{wecom_webhook_key}' \
      -H 'Content-Type: application/json' \
      -d '{
        "msgtype": "markdown",
        "markdown": {
          "content": "#{weChatmessage}"
        }
      }'
    )
  end
end
  • 參數(shù)解析:
  • scheme:工程名字
  • profile_name: 描述文件名字
  • wecom_webhook_key:企業(yè)微信 群機(jī)器人的key(首先要管理員添加一個群機(jī)器人)
  • export_method:描述文件類型

2. 使用

在項(xiàng)目目錄中執(zhí)行如下語句,打包、上傳TestFlight并通知企業(yè)微信群
fastlane release

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容