iOS開發(fā)熱門-自動(dòng)打包fastlane

使用fastlane工具自動(dòng)打包發(fā)布App Store或蒲公英測(cè)試平臺(tái)

?在以往的iOS開發(fā)過(guò)程中适瓦,我們大都使用xcode提供的工具進(jìn)行手動(dòng)打包ipa逞姿,這種打包方式會(huì)帶來(lái)大量時(shí)間上的浪費(fèi),想必對(duì)于有追求的開發(fā)者來(lái)說(shuō)時(shí)間都是寶貴的俱尼。那么苔咪,有沒有一種方式可以通過(guò)一行指令自動(dòng)完成打包呢?答案是:有的漾月,通過(guò)筆者行走于江湖多年,得到了fastlane的這個(gè)開源的神器胃珍,可以到以下地址進(jìn)行查看參考和學(xué)習(xí):

?本篇文章將分為兩大部分進(jìn)行全面的講解關(guān)于打包的內(nèi)容:

  • 使用xcode提供的打包工具進(jìn)行手動(dòng)打包梁肿;
  • 使用fastlane工具進(jìn)行自動(dòng)打包;

?下面我們先來(lái)看下xcode工具的打包流程:
寫在前面:本文中您所看到的效果都是基于xcode9.1進(jìn)行的觅彰,當(dāng)然吩蔑,開發(fā)環(huán)境證書配置都是自動(dòng)配置的,這里我不會(huì)再多贅述填抬。
1.設(shè)置如圖所示:

打包編譯過(guò)程是需要消耗一定的時(shí)間的烛芬,視工程資源文件大小而定;
xcode工具打包.png
2.導(dǎo)出ipa包:
導(dǎo)出ipa.png
3.選擇導(dǎo)出ipa包方式:
  • ad-hoc:打包發(fā)布蒲公英測(cè)試平臺(tái)飒责;
  • app-store:打包發(fā)布App Store赘娄;
  • 其他的簽名方式在xcode9.0后是自動(dòng)選擇;
    選擇導(dǎo)出ipa包方式.png
    4.將導(dǎo)出的ipa包存放到指定路徑宏蛉。
    ?到這里遣臼,打包的流程就完成了,下面我們就把導(dǎo)出的ipa通過(guò)xcode提供的上傳工具進(jìn)行發(fā)布app至App Store:
    上傳ipa.png
    這一步也會(huì)進(jìn)行對(duì)ipa進(jìn)行編譯檐晕,也是消耗時(shí)間的過(guò)程暑诸。。辟灰。
    ?至此个榕,我們的ipa就會(huì)在iTunes content 中構(gòu)建出新的版本,選擇該版本上線即可芥喇;my friend ~這種操作西采,你能忍?继控!我可是忍不了械馆!
    如果對(duì)于維護(hù)多個(gè)app或者多個(gè)target的工程胖眷,發(fā)布測(cè)試平臺(tái)或者App Store來(lái)講,這樣的操作是令人崩潰的霹崎,那么珊搀,我們收拾下令人窒息的心情,請(qǐng)繼續(xù)往下看~
    ?大家先來(lái)腦補(bǔ)一下這張圖
    fastlane打包流程.png

    ?接下來(lái)尾菇,向大家詳細(xì)的講解fastlane自動(dòng)打包境析,這里分以下 3 部分:
    1.單個(gè)工程使用fastlane自動(dòng)打包
    2.針對(duì)多個(gè)target環(huán)境使用fastlane自動(dòng)打包
    3.建議安裝下蒲公英的mac客戶端
    首先來(lái)看單個(gè)工程使用fastlane自動(dòng)打包的流程及配置:
  • 使用fastlane環(huán)境打包,我們得先配置一下環(huán)境派诬,fastlane是基于ruby的劳淆,所以我們需要安裝下ruby環(huán)境,安裝ruby環(huán)境參考此鏈接;
    *然后檢查 Xcode 命令行工具是否安裝默赂。在終端窗口中輸入命令:
  xcode-select --install

如果未安裝沛鸵,終端會(huì)開始安裝,如果報(bào)錯(cuò)誤:command line tools are already installed, use "Software Update" to install updates.代表已經(jīng)安裝缆八。

  • 以上依賴配置好之后就可以通過(guò) rubygem 進(jìn)行安裝了:
sudo gem install fastlane

安心等待一會(huì)曲掰,fastlane就安裝完成了。

  • 接下來(lái)就是要初始化fastlane
    打開終端耀里,cd到你的工程目錄蜈缤,然后執(zhí)行fastlane init:
Peter-2:~ Peter$ cd desktop
Peter-2:desktop Peter$ cd Popo/
Peter-2:Popo Peter$ fastlane init
[?] ?? /Users/peter/.rvm/rubies/ruby-2.4.1/lib/ruby/gems/2.4.0/gems/tty-screen-0.6.4/lib/tty/version.rb:3: warning: already initialized constant TTY::Screen::VERSION
/Users/peter/.rvm/gems/ruby-2.4.1@global/gems/tty-screen-0.6.4/lib/tty/version.rb:3: warning: previous definition of VERSION was here
[?] ?? 
[?] Looking for iOS and Android projects in current directory...
[17:08:01]: Created new folder './fastlane'.
[17:08:01]: Detected an iOS/macOS project in the current directory: 'Popo.xcodeproj'
[17:08:01]: -----------------------------
[17:08:01]: --- Welcome to fastlane ?? ---
[17:08:01]: -----------------------------
[17:08:01]: fastlane can help you with all kinds of automation for your mobile app
[17:08:01]: We recommend automating one task first, and then gradually automating more over time
[17:08:01]: What would you like to use fastlane for?
1. ??  Automate screenshots
2. ?????  Automate beta distribution to TestFlight
3. ??  Automate App Store distribution
4. ??  Manual setup - manually setup your project to automate your tasks
?  

寫在當(dāng)前:

  • 1、代表app市場(chǎng)圖片素材冯挎;
  • 2、發(fā)布到TestFlight進(jìn)行測(cè)試咙鞍;
  • 3房官、發(fā)布到App Store;
  • 4续滋、自定義
在初始化```fastlane```的過(guò)程中翰守,可能會(huì)出現(xiàn)要輸入蘋果開發(fā)者賬號(hào),
在 "Your Apple ID" 這一步輸入蘋果開發(fā)者賬號(hào)疲酌。
在“Please confirm the above values”這一步蜡峰,確認(rèn)信息,沒問題輸入 y朗恳。
然后湿颅,```fastlane ```會(huì)進(jìn)行一系列的初始化操作,包括下載 App Store 上的元數(shù)據(jù)和截屏文件粥诫。

在這里油航,我們選擇序號(hào) 4 ,來(lái)手動(dòng)去設(shè)置自定義的打包內(nèi)容怀浆,在這一步谊囚,你會(huì)發(fā)現(xiàn)新的世界~

?  4
[17:17:37]: ------------------------------------------------------------
[17:17:37]: --- Setting up fastlane so you can manually configure it ---
[17:17:37]: ------------------------------------------------------------
[17:17:37]: Installing dependencies for you...
[17:17:37]: $ bundle update
[17:17:48]: --------------------------------------------------------
[17:17:48]: --- ?  Successfully generated fastlane configuration ---
[17:17:48]: --------------------------------------------------------
[17:17:48]: Generated Fastfile at path `./fastlane/Fastfile`
[17:17:48]: Generated Appfile at path `./fastlane/Appfile`
[17:17:48]: Gemfile and Gemfile.lock at path `Gemfile`
[17:17:48]: Please check the newly generated configuration files into git along with your project
[17:17:48]: This way everyone in your team can benefit from your fastlane setup
[17:17:48]: Continue by pressing Enter ?

[17:17:51]: fastlane will collect the number of errors for each action to detect integration issues
[17:17:51]: No sensitive/private information will be uploaded, more information: https://docs.fastlane.tools/#metrics
[17:17:51]: ----------------------
[17:17:51]: --- fastlane lanes ---
[17:17:51]: ----------------------
[17:17:51]: fastlane uses a `Fastfile` to store the automation configuration
[17:17:51]: Within that, you'll see different lanes.
[17:17:51]: Each is there to automate a different task, like screenshots, code signing, or pushing new releases
[17:17:51]: Continue by pressing Enter ?

[17:17:51]: --------------------------------------
[17:17:51]: --- How to customize your Fastfile ---
[17:17:51]: --------------------------------------
[17:17:51]: Use a text editor of your choice to open the newly created Fastfile and take a look
[17:17:51]: You can now edit the available lanes and actions to customize the setup to fit your needs
[17:17:51]: To get a list of all the available actions, open https://docs.fastlane.tools/actions
[17:17:51]: Continue by pressing Enter ?

[17:17:52]: ------------------------------
[17:17:52]: --- Where to go from here? ---
[17:17:52]: ------------------------------
[17:17:52]: ??  Learn more about how to automatically generate localized App Store screenshots:
[17:17:52]:         https://docs.fastlane.tools/getting-started/ios/screenshots/
[17:17:52]: ?????  Learn more about distribution to beta testing services:
[17:17:52]:         https://docs.fastlane.tools/getting-started/ios/beta-deployment/
[17:17:52]: ??  Learn more about how to automate the App Store release process:
[17:17:52]:         https://docs.fastlane.tools/getting-started/ios/appstore-deployment/
[17:17:52]: ?????  Learn more about how to setup code signing with fastlane
[17:17:52]:         https://docs.fastlane.tools/codesigning/getting-started/
[17:17:52]: 
[17:17:52]: To try your new fastlane setup, just enter and run
[17:17:52]: $ fastlane custom_lane

#######################################################################
# fastlane 2.88.0 is available. You are on 2.87.0.
# You should use the latest version.
# Please update using `sudo gem install fastlane`.
#######################################################################

2.88.0 Improvements
* [action] Fix crashlytics to not autoload gsp_path if api_token is set (#12176) via Josh Holtz
* Improve error message when specified scheme is not found (#12182) via Cédric Luthi
* [action] Support checking remote git tags existence (#11675) via Takeru Chuganji
* Use Android environment to find adb (don't just rely on it being in PATH) (#12168) via Adam Cohen-Rose
* [snapshot] Make sure matched window has a non-empty frame (#12174) via Fran?ois Pradel
* [swift] Fixes string return value and shows all lanes (even without description) (#12171) via Josh Holtz
* [scan] Default skip_build to true in Scanfile template (#12162) via Aaron Brager

Please update using `sudo gem install fastlane`

等待初始化完成之后怕享,工程目錄下就多了一個(gè) fastlane目錄,其內(nèi)容如下:

fastlane文件

初始化后镰踏,我們還需要添加一個(gè)蒲公英測(cè)試平臺(tái)的插件以供提交測(cè)試函筋,在終端輸入fastlane add_plugin pgyer即可;
然后到工程目錄下可以看到有個(gè)fastlane文件創(chuàng)建成功了奠伪,子目錄里面有三個(gè)文件跌帐,一個(gè)Appfile,一個(gè)Fastfile文件芳来,另一個(gè)Pluginfile含末,我們通過(guò)名稱可知他們的大概用途:Appfile用來(lái)編輯設(shè)置app_identifier,apple_id和team_id的信息;Pluginfile是存放蒲公英測(cè)試平臺(tái)的默認(rèn)配置即舌;Fastfile管理你所創(chuàng)建的 lane 佣盒,了解詳情。它的格式是這樣的:

#---------- begin -----------

default_platform :ios

  platform :ios do

    desc "發(fā)布 蒲公英"
    lane :beta_pgy do
      gym(scheme: "Test", 
          export_method: "ad-hoc",
          silent: true,  # 隱藏沒有必要的信息
          clean: true  # 在構(gòu)建前先clean
          )
      pgyer(api_key: "b*******************************4", 
            user_key: "e********************************7", 
            update_description: get_update_description(), 
           # password: "123456", 
           # install_type: "2"
        )
    end

    desc "發(fā)布 到 蘋果TestFlight"
    lane :beta_apple do
      gym(scheme: "Test"],
          silent: true,  # 隱藏沒有必要的信息
          clean: true  # 在構(gòu)建前先clean
        )
      pilot #管理TestFlight測(cè)試用戶顽聂,上傳二進(jìn)制文件
    end

    desc "發(fā)布蘋果商店"
    lane :release_apple do
      
      gym(scheme: "Test"], 
          silent: true,  # 隱藏沒有必要的信息
          clean: true  # 在構(gòu)建前先clean
        )
      deliver #上傳截圖肥惭、元數(shù)據(jù)、App到iTunesConnect
    end

  #---------- end -------------

    # You can define as many lanes as you want

    after_all do |lane|
      # This block is called, only if the executed lane was successful

      # slack(
      #   message: "Successfully deployed new App Update."
      # )
    end

    error do |lane, exception|
      # slack(
      #   message: exception.message,
      #   success: false
      # )
    end
end

其中一個(gè)lane就是一個(gè)任務(wù)紊搪,里面是一個(gè)個(gè)的action組成的工作流蜜葱。
利用目前支持的工具可以做所有包含自動(dòng)化和可持續(xù)化構(gòu)建的每個(gè)環(huán)節(jié),例如:

  • scan 自動(dòng)化測(cè)試工具耀石,很好的封裝了 Unit Test
  • sigh 針對(duì)于 iOS 項(xiàng)目開發(fā)證書和 Provision file 的下載工具
  • match 同步團(tuán)隊(duì)每個(gè)人的證書和 Provision file 的超贊工具
  • gym 針對(duì)于 iOS 編譯打包生成 ipa 文件
  • deliver 用于上傳應(yīng)用的二進(jìn)制代碼牵囤,應(yīng)用截屏和元數(shù)據(jù)到 App Store
  • snapshot 可以自動(dòng)化iOS應(yīng)用在每個(gè)設(shè)備上的本地化截屏過(guò)程

執(zhí)行l(wèi)ane

定義完lane之后怎么執(zhí)行呢?打開終端滞伟,切換到項(xiàng)目的根目錄:執(zhí)行fastlane lane'name就可以了揭鳞。成功之后會(huì)在相應(yīng)的路徑下生成ipa文件,如果報(bào)錯(cuò)的話就根據(jù)錯(cuò)誤信息好好查看文檔梆奈。
如果安裝了mac版的蒲公英客戶端的朋友野崇,在自動(dòng)打包完成之后,客戶端會(huì)自動(dòng)攔截ipa的動(dòng)作(前提是保證你的賬戶和fastfile里面對(duì)于蒲公英的配置api_keyuser_key的配置保持一致即可)然后將ipa上傳即可亩钟;

?怎么樣乓梨,my friend,這一波操作下來(lái)是不是省去的時(shí)間可以去喝杯咖啡了清酥。來(lái)來(lái)來(lái)扶镀,接下來(lái)就是多個(gè)target環(huán)境使用fastlane自動(dòng)打包。這里分 3 部分來(lái)講解配置:

  • 配置.env 文件(工程里面有幾個(gè)traget总处,需要?jiǎng)?chuàng)建幾個(gè).env)
  • 配置 Deliverfile文件
  • 如何使用其進(jìn)行打包
    比如工程里面有兩個(gè)target(一個(gè)Test1狈惫,一個(gè)Test2),那么通過(guò)終端命令cd到上次初始化的fastlane目錄,然后在終端輸入touch .env.Test1胧谈,touch .env.Test2,繼續(xù)在當(dāng)前目錄下創(chuàng)建Deliverfiale忆肾,在終端輸入touch Deliverfile,創(chuàng)建完成后菱肖,你會(huì)發(fā)現(xiàn)在fastlane目錄下找不到剛剛創(chuàng)建的兩個(gè).env文件客冈,可參考此文章,接下來(lái)對(duì).env.Test1.env.Test2兩個(gè)文件進(jìn)行編輯;
    .env.Test1內(nèi)容如下:
#APP唯一標(biāo)識(shí)符
APP_IDENTIFIER = "com.Peter.Test1"

#發(fā)布版本號(hào)
APP_VERSION_RELEASE = "2.4.0"

#新版本修改記錄
RELEASE_NOTES = "1) 升級(jí)測(cè)試第一行\(zhòng)n2) 升級(jí)測(cè)試第二行"

#蒲公英 更新描述
PGY_UPDATE_DESCRIPTION = "fastlane自動(dòng)打包上傳測(cè)試"

#自動(dòng)提交審核
SUBMIT_FOR_REVIEW = false

#審核通過(guò)后立刻發(fā)布
AUTOMATIC_RELEASE = false

#蘋果開發(fā)者賬號(hào)
APPLE_ID = "XXXXXXXXXXXXXX"
#蘋果開發(fā)者帳號(hào)密碼
FASTLANE_PASSWORD = "*************"

#套裝ID
TEAM_ID = "XXXXXXXXXXXXXX"

#應(yīng)用名稱
SCHEME_NAME = "Test1"

#APP元數(shù)據(jù)及截圖存放路徑
METADATA_PATH = "./metadata/Test1Copy"
SCREENSHOTS_PATH = "./screenshots/Test1Copy"

#APP元數(shù)據(jù)及截圖下載時(shí),直接覆蓋原有數(shù)據(jù)稳强,不詢問
DELIVER_FORCE_OVERWRITE = true

.env.Test2內(nèi)容如下:

#APP唯一標(biāo)識(shí)符
APP_IDENTIFIER = "com.Peter.Test2"

#發(fā)布版本號(hào)
APP_VERSION_RELEASE = "2.4.1"

#新版本修改記錄
RELEASE_NOTES = "1) 升級(jí)測(cè)試第一行\(zhòng)n2) 升級(jí)測(cè)試第二行"

#蒲公英 更新描述
PGY_UPDATE_DESCRIPTION = "fastlane自動(dòng)打包上傳測(cè)試"

#自動(dòng)提交審核
SUBMIT_FOR_REVIEW = false

#審核通過(guò)后立刻發(fā)布
AUTOMATIC_RELEASE = false

#蘋果開發(fā)者賬號(hào)
APPLE_ID = "XXXXXXXXXXXXXXXXXXXXX"
#蘋果開發(fā)者帳號(hào)密碼
FASTLANE_PASSWORD = "****************"

#套裝ID
TEAM_ID = "XXXXXXXXXXXXXXXXXXXXX"

#應(yīng)用名稱
SCHEME_NAME = "Test2"

#APP元數(shù)據(jù)及截圖存放路徑
METADATA_PATH = "./metadata/Test2Copy"
SCREENSHOTS_PATH = "./screenshots/Test2Copy"

#APP元數(shù)據(jù)及截圖下載時(shí)场仲,直接覆蓋原有數(shù)據(jù),不詢問
DELIVER_FORCE_OVERWRITE = true

Deliverfile內(nèi)容如下:

app_identifier ENV['APP_IDENTIFIER'] # The bundle identifier of your app
username ENV['APPLE_ID'] # your Apple ID user

# 元數(shù)據(jù)的路徑
metadata_path ENV['METADATA_PATH']
screenshots_path ENV['SCREENSHOTS_PATH']

 #App store 中待發(fā)布的 App 版本退疫,若每個(gè) target 的版本號(hào)不同渠缕,可以通過(guò).env 文件來(lái)分別定義
 app_version ENV['APP_VERSION_RELEASE']

 #下載 metadata 及 screenshots 時(shí)直接覆蓋,不詢問
 force true

 #不覆蓋 iTunes Connect原有截圖
 skip_screenshots true
    
 #自動(dòng)提交審核
 submit_for_review ENV['SUBMIT_FOR_REVIEW']
  
 #審核通過(guò)后立刻發(fā)布
 automatic_release ENV['AUTOMATIC_RELEASE']

 #新版本修改記錄
 release_notes({        
    "zh-Hans" => ENV['RELEASE_NOTES']
 })

Appfile內(nèi)容如下:

# app_identifier("[[APP_IDENTIFIER]]") # The bundle identifier of your app
# apple_id("[[APPLE_ID]]") # Your Apple email address


# For more information about the Appfile, see:
#     https://docs.fastlane.tools/advanced/#appfile
 
app_identifier ENV['APP_IDENTIFIER'] # The bundle identifier of your app

apple_id ENV['APPLE_ID'] # Your Apple email address

team_id ENV['TEAM_ID'] # Developer Portal Team ID

Fastfile內(nèi)容如下:


#---------- begin -----------

default_platform :ios

  platform :ios do

    desc "1).Test1版本 發(fā)布到 蒲公英"
    lane :beta_test1_pgy do
      sh "fastlane beta_pgy --env Test1"
    end

    desc "2).Test2版本 發(fā)布到 蒲公英"
    lane :beta_test2_pgy do
      sh "fastlane beta_pgy --env Test2"
    end

    desc "3).Test1版本 發(fā)布到 蘋果商店"
    lane :release_test1_apple do
      sh "fastlane release_apple --env Test1"
    end

    desc "4).Test2版本 發(fā)布到 蘋果商店"
    lane :release_test2_apple do
      sh "fastlane release_apple --env Test2"
    end

    desc "5).Test1版本 和 Test2版本 同時(shí) 發(fā)布到 蒲公英"
    lane :beta_all_pgy do
      sh "fastlane beta_pgy --env Test1"
      sh "fastlane beta_pgy --env Test2"
    end

    desc "6).Test1版本 和 Test2版本 同時(shí) 發(fā)布到 蘋果TestFlight"
    lane :beta_all_apple do
      sh "fastlane beta_apple --env Test1"
      sh "fastlane beta_apple --env Test2"
    end

    desc "7).Test1版本 和 Test2版本 同時(shí) 發(fā)布到 蘋果商店"
    lane :release_all_apple do
      sh "fastlane release_apple --env Test1"
      sh "fastlane release_apple --env Test2"
    end

    desc "發(fā)布 指定版本 到 蒲公英"
    lane :beta_pgy do
      gym(scheme: ENV['SCHEME_NAME'], 
          export_method: "ad-hoc",
          silent: true,  # 隱藏沒有必要的信息
          clean: true  # 在構(gòu)建前先clean
          )
      pgyer(api_key: "b******************************4", 
            user_key: "e*******************************7", 
            update_description: get_update_description(), 
           # password: "123456", 
           # install_type: "2"
        )
    end

    desc "發(fā)布 指定版本 到 蘋果TestFlight"
    lane :beta_apple do
      
      gym(scheme: ENV['SCHEME_NAME'],
          silent: true,  # 隱藏沒有必要的信息
          clean: true  # 在構(gòu)建前先clean
        )
      pilot
    end

    desc "發(fā)布 指定版本 到 蘋果商店"
    lane :release_apple do
      
      gym(scheme: ENV['SCHEME_NAME'], 
          silent: true,  # 隱藏沒有必要的信息
          clean: true  # 在構(gòu)建前先clean
        )
      deliver
    end

  #---------- end -------------

    # You can define as many lanes as you want

    after_all do |lane|
      # This block is called, only if the executed lane was successful

      # slack(
      #   message: "Successfully deployed new App Update."
      # )
    end

    error do |lane, exception|
      # slack(
      #   message: exception.message,
      #   success: false
      # )
    end
end

到這里褒繁,所有的配置都已經(jīng)配置好了亦鳞,另外還有一個(gè)需要設(shè)置的地方,在xcode開發(fā)工具中請(qǐng)將scheme的shared勾選上棒坏,如圖:

設(shè)置scheme1.png

設(shè)置scheme2.png

緊接著燕差,在終端用命令進(jìn)入項(xiàng)目根目錄,輸入 fastlane ios
命令,效果如下:

fastlane ios
[?] ?? 
[22:28:04]: fastlane detected a Gemfile in the current directory
[22:28:04]: however it seems like you don't use `bundle exec`
[22:28:04]: to launch fastlane faster, please use
[22:28:04]: 
[22:28:04]: $ bundle exec fastlane ios
[22:28:04]: 
[22:28:04]: Get started using a Gemfile for fastlane https://docs.fastlane.tools/getting-started/ios/setup/#use-a-gemfile
[22:28:04]: In the config file './fastlane/Deliverfile' you have the line app_identifier, but didn't provide any value. Make sure to append a value right after the option name. Make sure to check the docs for more information
+-----------------------+---------+--------+
|               Used plugins               |
+-----------------------+---------+--------+
| Plugin                | Version | Action |
+-----------------------+---------+--------+
| fastlane-plugin-pgyer | 0.2.1   | pgyer  |
+-----------------------+---------+--------+

[22:28:04]: ------------------------------
[22:28:04]: --- Step: default_platform ---
[22:28:04]: ------------------------------
[22:28:04]: Welcome to fastlane! Here's what your app is setup to do:
+--------+-------------------------+----------------------------------------+
|                          Available lanes to run                           |
+--------+-------------------------+----------------------------------------+
| Number | Lane Name               | Description                            |
+--------+-------------------------+----------------------------------------+
| 1      | ios beta_test1_pgy      | 1).test1版本 發(fā)布到 蒲公英             |
| 2      | ios beta_test2_pgy      | 2).test2版本 發(fā)布到 蒲公英             |
| 3      | ios release_test1_apple | 3).test1版本 發(fā)布到 蘋果商店           |
| 4      | ios release_test2_apple | 4).test2版本 發(fā)布到 蘋果商店           |
| 5      | ios beta_all_pgy        | 5).test1版本 和 test2版本 同時(shí) 發(fā)布到  |
|        |                         | 蒲公英                                 |
| 6      | ios beta_all_apple      | 6).test1版本 和 test2版本 同時(shí) 發(fā)布到  |
|        |                         | 蘋果TestFlight                         |
| 7      | ios release_all_apple   | 7).test1版本 和 test2版本 同時(shí) 發(fā)布到  |
|        |                         | 蘋果商店                               |
| 8      | ios beta_pgy            | 發(fā)布 指定版本 到 蒲公英                |
| 9      | ios beta_apple          | 發(fā)布 指定版本 到 蘋果TestFlight        |
| 10     | ios release_apple       | 發(fā)布 指定版本 到 蘋果商店              |
| 0      | cancel                  | No selection, exit                     |
|        |                         | fastlane!                              |
+--------+-------------------------+----------------------------------------+
[22:28:04]: Which number would you like run?
1

此時(shí)坝冕,你想打什么包就打什么包徒探,是不是很隨心所欲呀?喂窟!

寫在當(dāng)前:前面說(shuō)的推薦安裝蒲公英客戶端测暗,為什么呢?請(qǐng)看這一波操作:
自動(dòng)打包成功.png
fastlane剛編譯成功磨澡,蒲公英客戶端就馬上進(jìn)行ipa攔截偷溺,現(xiàn)在讓我來(lái)發(fā)布一下看下成果:
fastlane自動(dòng)打包發(fā)布蒲公英.png

由于時(shí)間的問題,我就不一一進(jìn)行測(cè)試了钱贯,剩下的就交給各位朋友們自行測(cè)試看看效果。侦另。秩命。。
?親們褒傅,如遇到問題可隨時(shí)交流弃锐,歡迎來(lái)撩!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末殿托,一起剝皮案震驚了整個(gè)濱河市霹菊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖旋廷,帶你破解...
    沈念sama閱讀 210,835評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸠按,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡饶碘,警方通過(guò)查閱死者的電腦和手機(jī)目尖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)扎运,“玉大人瑟曲,你說(shuō)我怎么就攤上這事『乐危” “怎么了洞拨?”我有些...
    開封第一講書人閱讀 156,481評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)负拟。 經(jīng)常有香客問我烦衣,道長(zhǎng),這世上最難降的妖魔是什么齿椅? 我笑而不...
    開封第一講書人閱讀 56,303評(píng)論 1 282
  • 正文 為了忘掉前任琉挖,我火速辦了婚禮,結(jié)果婚禮上涣脚,老公的妹妹穿的比我還像新娘示辈。我一直安慰自己,他們只是感情好遣蚀,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評(píng)論 5 384
  • 文/花漫 我一把揭開白布矾麻。 她就那樣靜靜地躺著,像睡著了一般芭梯。 火紅的嫁衣襯著肌膚如雪险耀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,729評(píng)論 1 289
  • 那天玖喘,我揣著相機(jī)與錄音甩牺,去河邊找鬼。 笑死累奈,一個(gè)胖子當(dāng)著我的面吹牛贬派,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播澎媒,決...
    沈念sama閱讀 38,877評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼搞乏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了戒努?” 一聲冷哼從身側(cè)響起请敦,我...
    開封第一講書人閱讀 37,633評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后侍筛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萤皂,經(jīng)...
    沈念sama閱讀 44,088評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評(píng)論 2 326
  • 正文 我和宋清朗相戀三年勾笆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了敌蚜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,563評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窝爪,死狀恐怖弛车,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蒲每,我是刑警寧澤纷跛,帶...
    沈念sama閱讀 34,251評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站邀杏,受9級(jí)特大地震影響贫奠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜望蜡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評(píng)論 3 312
  • 文/蒙蒙 一唤崭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧脖律,春花似錦谢肾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至微姊,卻和暖如春酸茴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背兢交。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工薪捍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人配喳。 一個(gè)月前我還...
    沈念sama閱讀 46,240評(píng)論 2 360
  • 正文 我出身青樓飘诗,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親界逛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容