App的分發(fā)測試(四) —— fastlane自動化打包(一)

版本記錄

版本號 時間
V1.0 2019.03.02 星期六

前言

我們在做App開發(fā)的時候顿乒,開發(fā)人員開發(fā)完成以后就要交給QA進行測試了削樊,有幾種方式青团,一種就是將QA的測試機加到賬號里面的Device里面何什,這個有個數(shù)限制(每種硬件類型不能超過100臺组哩,即使刪除設備也不會重置),然后利用三方平臺比如說蒲公英進行分發(fā),還有一種方法就是使用TestFlight進行測試伶贰,這個專題就主要說一下App分發(fā)測試相關的內容蛛砰。感興趣的看上面幾篇。
1. App的分發(fā)測試(一) —— 淺談蒲公英平臺分發(fā)測試的使用(一)
2. App的分發(fā)測試(二) —— TestFlight集成和分發(fā)測試(一)
3. App的分發(fā)測試(三) —— fastlane自動化打包并上傳(一)

開始

首先看下寫作環(huán)境

Other, macOS 10.14, Other

這是一個美妙的時刻:你已經(jīng)花了幾天黍衙,幾周甚至幾個月來構建應用程序泥畅,它終于準備好與世界分享。您所要做的就是將其提交到App Store琅翻。這有多難位仁,對吧?

提示大量的工作:捕獲大量的屏幕截圖方椎,將您的應用程序添加到Apple DeveloperApp Store Connect網(wǎng)站聂抢,上傳您的二進制文件和元數(shù)據(jù)以及其他無意識的工作!哎呀棠众!

有沒有更好的方法涛浙?如果只有您可以運行單個命令,在所有支持的設備上截取所有屏幕截圖摄欲,則自動使用每種受支持的語言。如果只有一個命令來上傳這些屏幕截圖疮薇,請將您的應用添加到Apple的開發(fā)者網(wǎng)站并提交所有內容胸墙。想想你所節(jié)省的所有時間!

嗯按咒,你很幸運迟隅。感謝創(chuàng)作者Felix Krause和主要維護者Josh Holtz,有一個工具可以完成所有這些以及更多励七!它被稱為fastlane智袭!在本教程中,您將學習如何使用fastlane將應用程序部署到App Store掠抬。它一定會成為你最好的新朋友吼野,即使谷歌在2017年通過收購fastlane也與他們建立了關系 acquiring it in 2017

If sticks were screenshots, this dog would be nearly as helpful as fastlane

注意:本教程假設您擁有付費Apple Developer帳戶两波,以及命令行瞳步,Xcode和應用程序提交過程的基本知識。

首先腰奋,使用本教程的示例應用程序mZone PokerNo Limit Texas Hold'Em錦標賽的撲克計算器单起。 它會根據(jù)您的籌碼數(shù)量和當前的大盲注級別顯示建議的操作。

在Xcode中打開mZone項目來構建劣坊,運行并檢查它嘀倒。


Setting Up fastlane

fastlane工具是Ruby腳本的集合,因此您必須安裝正確版本的Ruby。 您的操作系統(tǒng)默認情況下可能會附帶Ruby 2.0测蘑,但您可以通過打開終端并輸入以下內容來確認是否屬于這種情況:

ruby -v

如果沒有安裝灌危,最簡單的方法是通過Homebrew為macOS打包管理器。

輸入此Terminal命令安裝Homebrew

/usr/bin/ruby -e \
  "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

然后帮寻,安裝Ruby使用:

brew update && brew install ruby

運行brew link --overwrite ruby乍狐,如果Homebrew指示您這樣做,則打開一個新的終端會話固逗。

您還需要Xcode Command Line Tools (CLT)浅蚪。 要確保它們已安裝,請進入終端:

xcode-select --install

如果已安裝Xcode CLT烫罩,您將收到以下錯誤:xcode-select: error: command line tools are already installed, use "Software Update" to install updates惜傲。 如果沒有,請在出現(xiàn)提示時繼續(xù)安裝贝攒。

現(xiàn)在你已準備好安裝fastlane盗誊! 輸入以下命令:

sudo gem install -n /usr/local/bin fastlane --verbose

如果您更喜歡使用Homebrew,請輸入以下命令:

brew cask install fastlane

注意:使用El Capitan隘弊,OS X引入了系統(tǒng)完整性保護(System Integrity Protection)(也稱為Rootless)哈踱,可防止用戶具有root訪問權限。 / usr / local / bin仍然是可寫的梨熙,這就是你在那里安裝fastlane的原因开镣。

輸入系統(tǒng)密碼后,您將在終端中看到一系列活動咽扇,表明安裝正在進行中邪财。 這可能需要幾分鐘時間,所以可以喝點咖啡质欲,遛狗或者刷你的僵尸戰(zhàn)術树埠。

安裝完成后,您就可以在項目中設置fastlane了嘶伟。 但在此之前怎憋,這里是對fastlane工具的高級別介紹。


The fastlane Toolchain

為了發(fā)揮其魔力九昧,fastlane將以下一套工具集中在一起:

  • produceApp Store ConnectApple Developer Portal中創(chuàng)建新的iOS應用程序盛霎。
  • cert自動創(chuàng)建和維護iOS代碼簽名證書。
  • sigh創(chuàng)建耽装,更新愤炸,下載和修復配置文件。
  • snapshot可自動在每臺設備上獲取iOS應用的本地化屏幕截圖掉奄。
  • frameit將您的屏幕截圖放入正確的設備框架中规个。
  • gym構建并打包您的iOS應用程序凤薛。
  • deliver將截圖,元數(shù)據(jù)和您的應用程序上傳到App Store诞仓。
  • pem會自動生成并更新您的推送通知配置文件缤苫。
  • spaceship是一個Ruby庫,可以訪問Apple Developer CenterApp Store Connect API墅拭。
  • pilot自動化TestFlight部署并管理beta測試人員活玲。
  • boarding邀請beta測試人員。
  • match使用Git匹配整個團隊中的同步證書和配置文件谍婉。
  • scan會對您的應用運行測試舒憾。

您今天將使用其中的幾種工具。現(xiàn)在已經(jīng)足夠理論了 - 現(xiàn)在是時候把這個教程付諸實踐并進入快車道了穗熬!


Adding fastlane to Your Project

打開終端并cdmZone啟動項目镀迂。 例如,如果您已將mZone_Sample_Project文件夾添加到桌面唤蔗,則可以輸入:

cd ~/Desktop/mZone_Sample_Project/mZone

mZone starter項目設置為工作目錄探遵。

接下來,輸入:

fastlane init

要初始化fastlane

注意:如果出現(xiàn)permission denied錯誤妓柜,請在此命令前加上sudo箱季。

如果在任何時候,fastlane告訴你更新到最新的版本棍掐,但運行sudo gem update fastlane輸出Nothing to update规哪,也許你正在使用的Ruby管理器不是最新的。 運行gem sources --add https://rubygems.org/來安裝Ruby Gems塌衰,因為它可能會生成最新的信息。

經(jīng)過一些輸出后蝠嘉,fastlane會問:What would you like to use fastlane for?

雖然fastlane recommend[s] automating one task first最疆,但在本單一教程中您將實施多項自動操作,因此輸入4以開始手動設置蚤告。 讀取輸出并在出現(xiàn)提示時按Enter鍵努酸。

回到mZone文件夾,你會看到一些新東西:Gemfile杜恰,它包含fastlane gem作為項目依賴項和fastlane文件夾获诈,包含:

  • Appfile:存儲應用程序標識符,Apple ID以及fastlane設置應用程序所需的任何其他標識信息心褐。
  • Fastfile:管理您將創(chuàng)建的用于調用fastlane操作的通道舔涎。

在您選擇的文本編輯器中打開Fastfile,如果文本編輯器支持智能引號逗爹,則禁用智能引號亡嫌,然后用以下內容替換文件內容:

default_platform(:ios)

platform :ios do
# 1
  desc "Create app on Apple Developer and App Store Connect sites"
# 2
  lane :create_app do
# 3
?    produce
  end
end

如果你以前從未見過Ruby,這對你來說可能就像是胡言亂語。 這是代碼的作用:

  • 1) 提供通道lane的描述挟冠。 (lane是順序任務的工作流程)于购。
  • 2) 將此通道命名為create_app
  • 3) 使用produce將應用程序添加到Developer PortalApp Store Connect知染。

哇噢肋僧! 你現(xiàn)在已經(jīng)創(chuàng)建了你的第一條lane

保存Fastfile控淡,然后打開Appfile嫌吠。 刪除井號(#)以取消注釋以apple_id開頭的行,然后將[[APPLE_ID]]替換為您的實際Apple ID用戶名逸寓。 通過立即設置此信息居兆,fastlane將不必在以后反復提示您。

注意:如果您的App Store ConnectApple Developer Portal用戶名不同竹伸,請將apple_id行替換為:

apple_dev_portal_id("[[APPLE_DEVELOPER_ACCOUNT_USERNAME]]")
itunes_connect_id("[[APP_STORE_CONNECT_ACCOUNT_USERNAME]]")

然后用各自的用戶名替換每個用戶名占位符泥栖。

關閉前保存Appfile

1. Creating Your App

在項目文件夾中打開終端并輸入:

fastlane create_app

這將運行您剛剛創(chuàng)建的create_app通道勋篓。

你應該看到這樣的東西:

在輸出的頂部吧享,fastlane建議你在fastlane命令之前加上“bundle exec”,以便在gem包的上下文中更快地啟動fastlane譬嚣。 展望未來钢颂,你可以這樣做。

如果出現(xiàn)提示拜银,請輸入App Store Connect密碼殊鞭。 如果您的Developer Portal有多個團隊,請輸入與您要用于mZone Poker應用程序的團隊相對應的編號尼桶。

最終操灿,產(chǎn)品將要求您輸入您的bundle ID。 是時候創(chuàng)造了一個泵督!

bundle identifier必須與App Store Connect中曾經(jīng)使用過的任何其他bundle identifier不同趾盐。 嘗試使用以下格式輸入唯一的包標識符:

com.mZone-Poker.[Insert your email address minus “@” and “.”]

如果已經(jīng)使用了bundle identifier,請對其進行編輯并重試小腊,直到您提交了唯一ID救鲤。

然后,當系統(tǒng)提示您提交應用名稱時秩冈,它也必須是唯一的本缠。 嘗試使用以下格式:

mZone Poker [Insert your email address minus “@” and “.”]

但是,應用程序名稱不能超過30個字符入问,因此必要時會截斷搓茬。

如果您的App Store Connect帳戶有多個團隊犹赖,請輸入與您要使用的團隊相對應的編號。

如果您收到任何錯誤卷仑,指出您的Apple Developer帳戶存在問題(例如峻村,如果您需要接受新的程序協(xié)議),請更正問題锡凝,然后再次produce產(chǎn)品粘昨。

如果應用程序名稱不可用,則該過程將以錯誤結束窜锯。 再次運行produce张肾,重新輸入您的Apple ID和您剛創(chuàng)建的相同Bundle ID,然后展開您的創(chuàng)意肌肉以創(chuàng)建唯一ID或返回到此段落的頂部并重復锚扎。 我們知道吞瞪,令人沮喪,但我們相信你會打破無限循環(huán)驾孔!

登錄Apple Developer CenterApp Store Connect芍秆。瞧! 您的應用已添加到兩者中翠勉。 多么酷把丁?

Apple Developer (above), App Store Connect (below)

重新打開Appfile对碌,取消注釋以app_identifier開頭的行荆虱,然后將[[APP_IDENTIFIER]]替換為剛創(chuàng)建的bundle ID

如果您之前必須選擇一個團隊朽们,請?zhí)砑訄F隊名稱怀读,這樣您就不必在運行l(wèi)anes時再次輸入該團隊。 要指定Developer Portal / App Store Connect團隊名稱骑脱,請?zhí)砑樱?/p>

team_name ("[[TEAM_NAME]]")

[[TEAM_NAME]]替換為您隊伍的名稱菜枷。


Generating the Deliverfile

回到終端,輸入:

bundle exec fastlane deliver

當fastlane問:“Do you want to setup deliver?”輸入y作為回應惜姐。

接下來fastlane將會問:“Would you like to use Swift instead of Ruby?”,雖然作為iOS開發(fā)人員椿息,你可能更喜歡在Swift工作歹袁,但在編寫本教程時,fastlane.swift仍處于測試階段寝优。 因此条舔,輸入n以在fastlane文件中使用Ruby

deliver成功完成后丛楚,在Finder中導航回mZone / fastlane插勤,您會看到一些新內容:

  • 元數(shù)據(jù)目錄,它將保存應用程序的大部分元數(shù)據(jù)唉匾。
  • Deliverfile凄硼,它將包含一些剩余的元數(shù)據(jù)铅协。
  • 截圖目錄,其中包含應用截圖摊沉。

在元數(shù)據(jù)目錄中狐史,您會注意到一系列以常見App Store項目命名的文本文件,如描述说墨,關鍵字骏全,類別等。fastlane將使用這些文件將您的應用程序的元數(shù)據(jù)信息提交到App Store Connect尼斧。

打開en-US / description.txt并添加:

mZone is a simple poker calculator for No Limit Texas Hold 'Em tournaments that displays a recommended course of action based on your chip count and the current big blind level.

keywords.txt中添加

Poker, Cards, Gambling

確認name.txt已包含您的應用名稱姜贡,然后將https://www.xxx.com添加到privacy_url.txtsupport_url.txt

雖然此應用程序支持法語和英語棺棵,但只存在en-US文件夾楼咳。 要解決此問題,請在同一目錄中復制en-US文件夾并將其命名為fr-FR律秃。 為了保持這個fastlane教程簡短爬橡,您不必將元數(shù)據(jù)翻譯成法語......這一次。

接下來棒动,在元數(shù)據(jù)文件夾中:

  • Copyright (c) 2019 Razeware LLC添加到copyright.txt糙申。
  • Games添加到primary_category.txt
  • Card添加到primary_first_sub_category.txt船惨。
  • Casino添加到primary_second_sub_category.txt柜裸。

然后,在同一文件夾中粱锐,使用您喜歡的文本/代碼編輯器創(chuàng)建一個名為app_store_rating_config.jsonJSON文件疙挺,其中包含:

{
  "CARTOON_FANTASY_VIOLENCE": 0,
  "REALISTIC_VIOLENCE": 0,
  "PROLONGED_GRAPHIC_SADISTIC_REALISTIC_VIOLENCE": 0,
  "PROFANITY_CRUDE_HUMOR": 0,
  "MATURE_SUGGESTIVE": 0,
  "HORROR": 0,
  "MEDICAL_TREATMENT_INFO": 0,
  "ALCOHOL_TOBACCO_DRUGS": 0,
  "GAMBLING": 2,
  "SEXUAL_CONTENT_NUDITY": 0,
  "GRAPHIC_SEXUAL_CONTENT_NUDITY": 0,
  "UNRESTRICTED_WEB_ACCESS": 0,
  "GAMBLING_CONTESTS": 0
}

該評級配置指示該應用具有frequent/intense模擬賭博(即,value= 2)并且沒有其他列出的內容怜浅。 此文件為Apple提供了分配適當年齡等級所需的信息铐然。

最后,在review_information文件夾中恶座,將您的電子郵件地址添加到email_address.txt搀暑,您的名字為first_name.txt,您的姓氏為last_name.txt跨琳,您的電話號碼為phone_number.txt自点。 例如,在電話號碼前加上“+”后跟國家/地區(qū)代碼; +44 844 209 0611脉让。

恭喜桂敛! 您已添加提交所需的所有元數(shù)據(jù)功炮。

注意:您可以在此處here找到元數(shù)據(jù)選項和Deliverfile設置的完整列表。


Automating Screenshots

截圖可能很乏味术唬。 您的應用支持的設備和語言越多薪伏,您刻錄的時間就越多。 痛苦碴开!

mZone Poker支持兩種語言和兩種iPhone屏幕寬高比毅该。 如果您必須為每種語言和屏幕寬高比拍攝每個設備的五個屏幕截圖,那么這將是20個屏幕截圖潦牛! 但是眶掌,使用fastlane,您可以通過運行單個命令來完成所有這些操作巴碗。

通過進入終端設置快照項目:

fastlane snapshot init

Snapfile文件現(xiàn)在將出現(xiàn)在fastlane文件夾中朴爬。 打開它并用以下內容替換文件的內容:

# 1 - A list of devices you want to take the screenshots from
devices([
  "iPhone 8 Plus",
  "iPhone SE"
])

# 2 - A list of supported languages

languages([
  'en-US',
  'fr-FR'
])

# 3 - The name of the scheme which contains the UI Tests

scheme("mZone Poker UITests")

# 4 - Where should the resulting screenshots be stored?

output_directory "./fastlane/screenshots"

# 5 - Clears previous screenshots

clear_previous_screenshots(true)

在這里,您指定:

  • 1) 您希望fastlane捕獲屏幕截圖的設備橡淆。
  • 2) 您要捕獲的本地化語言召噩。
  • 3) 您即將創(chuàng)建的Xcode scheme的名稱,用于運行屏幕截圖自動化逸爵。
  • 4) 屏幕截圖輸出目錄具滴。
  • 5) fastlane應該在捕獲新的屏幕截圖之前清除輸出目錄中的任何屏幕截圖。

關閉前保存文件师倔。

返回終端并記下運行fastlane snapshot init后出現(xiàn)的說明:

這就是你接下來要做的

1. Creating a Test Target

在Xcode中打開mZone Poker.xcodeproj构韵,然后導航到File ? New ? Target。 在iOS選項卡的Test部分中趋艘,選擇iOS UI Testing Bundle疲恢,然后單擊Next

Product Name字段中瓷胧,輸入mZone Poker UITests显拳,然后單擊Finish

mZone Poker UITests文件夾現(xiàn)在應該出現(xiàn)在Xcode的左側導航菜單中搓萧。

轉到目標的General頁面杂数。 在mZone Poker目標下方,您現(xiàn)在可以看到mZone Poker UITests瘸洛。 選擇mZone Poker UITests揍移,如果您看到一條錯誤聲明Signing for “mZone Poker UITests” requires a development team,請選擇一個團隊货矮。

返回fastlane目錄羊精,然后將SnapshotHelper.swift拖到Xcode項目導航器中的mZone Poker UITests文件夾下斯够。 當出現(xiàn)Choose options for adding these files窗口時囚玫,選擇:

  • Copy items if needed
  • Create groups
  • mZone Poker UITests

在單擊Finish之前取消選擇mZone Poker目標喧锦。

接下來,在mZone Poker UITests中打開mZone_Poker_UITests.swift抓督。 刪除setUp()tearDown()燃少,然后將testExample()的內容替換為:

// 1
let app = XCUIApplication()
setupSnapshot(app)
app.launch()
// 2
let chipCountTextField = app.textFields["chip count"]
chipCountTextField.tap()
chipCountTextField.typeText("10")
// 3
let bigBlindTextField = app.textFields["big blind"]
bigBlindTextField.tap()
bigBlindTextField.typeText("100")
// 4
snapshot("01UserEntries")    
// 5
app.buttons["what should i do"].tap()
snapshot("02Suggestion")   

這是代碼的作用:

  • 1) 設置測試以拍攝快照并啟動應用程序。
  • 2) 點擊Chip Count文本字段(其可訪問性標識符在故事板中預先設置為Chip Count)并在該字段中輸入10铃在。
  • 3) 點擊Big Blind文本字段并輸入100阵具。
  • 4) 拍攝快照以顯示應用與用戶條目的外觀。
  • 5) 點擊What Should I Do?按鈕然后采取另一個屏幕截圖來捕獲結果警報定铜。

接下來阳液,要創(chuàng)建mZone Poker UITests方案,請單擊運行和停止按鈕右側的按鈕揣炕,然后選擇Manage Schemes…帘皿,選擇mZone Poker UITests旁邊的Show并在兩個目標旁邊共享以授予fastlane訪問權限。 然后畸陡,單擊mZone Poker UITests行和Edit ...鹰溜。

注意:如果未顯示該scheme,請單擊+并從目標下拉列表中選擇mZone Poker UITests丁恭。

在方案編輯器的左側菜單中單擊Build曹动。 然后,在mZone Poker UITests目標旁邊牲览,選擇TestRun選項墓陈,然后單擊Close以保存更改。

離開Xcode竭恬,打開Fastfile跛蛋,在create_app通道下面添加:

  desc "Take screenshots"
  lane :screenshot do
    snapshot
  end

screenshot通道使用快照根據(jù)Snapfile的設置截取屏幕截圖。

保存Fastfile痊硕,返回終端并輸入:

bundle exec fastlane screenshot

現(xiàn)在赊级,觀看...截圖被捕獲,您無需做任何其他事情岔绸!

快照完成后理逊,屏幕截圖的HTML預覽應自動打開。

注意:快照需要訪問Snapfile中列出的模擬器盒揉。 如果您缺少該列表中的一個或多個設備晋被,請轉到Window ? Devices,在Xcode中添加它們刚盈。 然后羡洛,單擊+以添加新模擬器。

如果您看到有關模糊模擬器名稱的警告藕漱,則可能需要刪除重復的模擬器或更改模擬器名稱以匹配Snapfile中的模擬器名稱欲侮。

只需一個命令崭闲,您的所有設備屏幕截圖均為英語和法語 - 它沒有比這更好!


Creating the IPA File

構建和上傳應用程序也是一個耗時的過程威蕉。 但是猜猜 - fastlane可以用它的gym工具做到這一點刁俭!

注意:請確保您已在Xcode中的mZone Poker目標中設置了bundle identifier和簽名身份。

在終端中韧涨,運行:

fastlane gym init

創(chuàng)建Gymfile

打開Gymfile并將其內容替換為:

# 1
scheme("mZone Poker")
# 2
output_directory("./fastlane/builds")
# 3
include_bitcode(false)
# 4
include_symbols(false)
#5
export_xcargs("-allowProvisioningUpdates")

此代碼執(zhí)行以下操作:

  • 1) 指定mZone Poker的計劃牍戚。
  • 2) 指定fastlane應存儲.ipa app二進制文件的位置。
  • 3) 從構建中排除bitcode虑粥。 Bitcode允許Apple優(yōu)化您的應用程序如孝,但暫時將其排除以加快構建速度。
  • 4) 從構建中排除符號娩贷。 包含符號允許Apple訪問應用程序的調試信息暑竟,但暫時將其排除以加快構建速度。
  • 5) 允許Xcode使用自動配置育勺。

打開Fastfile并在屏幕截圖下添加以下內容:

  desc "Create ipa"
  lane :build do
    # 1
    enable_automatic_code_signing
    # 2
    increment_build_number
    # 3
    gym
  end

這個build lane

  • 1) 在Xcode中啟用自動配置但荤。
  • 2) 將構建數(shù)增加1(因此每個構建號對于App Store Connect的上載要求是唯一的)。
  • 3) 創(chuàng)建一個簽名的.ipa文件涧至。

保存Fastfile腹躁,然后在終端中運行build

bundle exec fastlane build

如果系統(tǒng)提示您輸入鑰匙串密碼以便fastlane訪問您的證書,請執(zhí)行此操作南蓬。 如果您不想重復授予相同權限纺非,請選擇Allow Always。 一旦構建成功完成赘方,簽名的.ipa應該出現(xiàn)在fastlane / builds中烧颖。


Uploading to App Store Connect

要將屏幕截圖,元數(shù)據(jù)和.ipa文件上傳到App Store Connect窄陡,您將使用deliver炕淮。

首先,用以下內容替換Deliverfile的內容:

# 1
price_tier(0)
# 2
submission_information({
    export_compliance_encryption_updated: false,
    export_compliance_uses_encryption: false,
    content_rights_contains_third_party_content: false,
    add_id_info_uses_idfa: false
})
# 3
app_rating_config_path("./fastlane/metadata/app_store_rating_config.json")
# 4
ipa("./fastlane/builds/mZone Poker.ipa”)
# 5
submit_for_review(true)
# 6
automatic_release(false)

在這里你:

  • 1) 將價格等級設置為0跳夭,表明它是一個免費的應用程序涂圆。
  • 2) 回答Apple在手動提交審核時會向您呈現(xiàn)的問題。
  • 3) 提供應用評級配置位置币叹。
  • 4) 提供.ipa文件位置润歉。
  • 5) 將submit_for_review設置為true以自動提交應用以供審核。
  • 6) 將automatic_release設置為false颈抚,因此您必須在應用審核接受后手動釋放該應用踩衩。

打開Fastfile。 在build lane之后,添加:

  desc "Upload to App Store"
  lane :upload do
    deliver
  end

然后驱富,為fastlane創(chuàng)建元數(shù)據(jù)的預覽反砌,打開終端并輸入:

bundle exec fastlane upload

如果一切看起來都很好,請在終端中鍵入y以批準萌朱。

完成lane后,登錄App Store Connect策菜。 屏幕截圖晶疼,元數(shù)據(jù)和構建應該在那里,等待審查又憨。


Putting It All Together

您現(xiàn)在可以使用單獨的通道來創(chuàng)建應用翠霍,截屏,構建和上傳蠢莺。 雖然你可以一個一個地調用他們寒匙,但是你不想,對吧躏将?

哦锄弱,不 - 你想要一個能完成一切的命令。

打開Fastfile祸憋。 upload通道后会宪,添加:

  desc “Create app, take screenshots, build and upload to App Store"
  lane :do_everything do
    create_app
    screenshot
    build
    upload
  end

恰如其分,do_everything可以做好一切蚯窥。

此外掸鹅,要使通道完全免操作,請打開Deliverfile拦赠,并在底部添加:

force(true)

這會導致fastlane跳過屏幕截圖和元數(shù)據(jù)批準巍沙。

現(xiàn)在,讓fastlane完成所有繁重的工作荷鼠,運行:

bundle exec fastlane do_everything

Supporting Multiple Targets

mZone_Sample_Project中看到Multiple_Targets文件夾句携? 在Xcode中打開Multiple_Targets / mZone-2 / mZone Poker.xcodeproj。 除了兩個新目標之外允乐,這個項目應該看起來很像第一個:mZone Poker PromZone Poker Pro UITest务甥。

要在運行mZone PokermZone Poker Pro之間切換,請單擊“運行”和“停止”按鈕右側的按鈕喳篇,然后選擇您希望運行的應用程序的方案敞临。

Select the scheme of the app you’d like to run.

構建并運行mZone Poker Pro。 它與mZone Poker幾乎完全相同麸澜,但會返回更詳細的建議挺尿。

General頁面上,將mZone Poker的包標識符設置為您之前創(chuàng)建的標識符。

然后编矾,為mZone Poker Pro設置一個暫定的新bundle ID熟史,例如:

com.mZone-Poker-Pro.[Insert your email address minus “@”  and “.”]

現(xiàn)在,回到Finder窄俏。 將mZone中的Gemfilefastlane目錄復制并粘貼到mZone-2中蹂匹。 然后,將mZone-2 / fastlane / SnapshotHelper.swift拖入新項目凹蜈。 當出現(xiàn)Choose options for adding these files窗口時限寞,選擇:

  • Copy items if needed.
  • Create groups.
  • mZone Poker UITests.
  • mZone Poker Pro UITests.

點擊Finish


Setting Up Multiple Environments

環(huán)境(.env)文件包含應用程序在執(zhí)行期間可以不同地訪問的配置設置。 對于此項目仰坦,您將創(chuàng)建兩個環(huán)境 - 每個應用程序目標一個環(huán)境履植。

打開您喜歡的文本編輯器,禁用智能引號并輸入:

SCHEME = "mZone Poker"
TEST_SCHEME = "mZone Poker UITests"
BUNDLE_IDENTIFIER = "[[YOUR UNIQUE BUNDLE IDENTIFIER]]"
APP_NAME = "[[YOUR UNIQUE APP NAME]]"

此環(huán)境包含mZone Poker的環(huán)境方案悄晃,測試方案玫霎,包標識符和應用程序名稱。 將[[YOUR UNIQUE BUNDLE IDENTIFIER]]替換為mZone Pokerbundle ID[[YOUR UNIQUE APP NAME]]和應用程序的唯一名稱妈橄。

將文件保存為mZone-2 / fastlane庶近,為.env.mZone_Poker(沒有文件后綴)。 由于默認情況下.env變量是隱藏文件眷蚓,如果在Finder中看不到.env.mZone_Poker拦盹,請按Shift-Command-.。 而在Finder中可以隱藏文件溪椎。

同樣普舆,創(chuàng)建第二個文件,其中包含:

SCHEME = "mZone Poker Pro"
TEST_SCHEME = "mZone Poker Pro UITests"
BUNDLE_IDENTIFIER = "[[YOUR UNIQUE BUNDLE IDENTIFIER]]"
APP_NAME = "[[YOUR UNIQUE APP NAME]]"

替換[[YOUR UNIQUE BUNDLE IDENTIFIER]] mZone Poker Pro的當前bundle ID校读。 然后創(chuàng)建一個暫定的唯一應用名稱沼侣,例如:

mZone Poker Pro [Insert your email address minus “@”  and “.”]

請記住,應用名稱不能超過30個字符歉秫,因此必要時會截斷蛾洛。

將文件另存為.env.mZone_Poker_Pro在同一目錄中。

現(xiàn)在雁芙,當您在方案之間切換時轧膘,您將能夠使用變量來訪問當前設置。

對于初學者兔甘,打開Appfile谎碍,取消注釋app_identifier行并替換:

app_identifier("[[APP_IDENTIFIER]]")

使用下面

app_identifier(ENV['BUNDLE_IDENTIFIER'])

“ENV ['BUNDLE_IDENTIFIER']”告訴fastlane從您設置為當前環(huán)境的任何一個中獲取bundle ID

Deliverfile中洞焙,將.ipa行替換為:

ipa("./fastlane/builds/#{ENV['APP_NAME']}.ipa")

Gymfile中蟆淀,將方案行替換為:

scheme(ENV['SCHEME'])

Snapfile中拯啦,將schemeoutput_directory行替換為:

scheme(ENV['TEST_SCHEME'])

output_directory "./fastlane/screenshots/#{ENV['SCHEME']}"

最后,返回到新的元數(shù)據(jù)目錄熔任。 選擇其所有內容并將其放入名為mZone Poker的新文件夾中褒链。

然后,復制那個復制mZone Poker Pro的文件夾和名稱疑苔。

mZone Poker Pro / en-US / name.txtmZone Poker Pro / fr-FR / name.txt的內容更改為新應用程序的名稱甫匹。 為簡單起見,暫時保留所有其他元數(shù)據(jù)惦费。

現(xiàn)在兵迅,要運行第二個目標的所有命令,您可以輸入:

bundle exec fastlane do_everything --env mZone_Poker_Pro

這將使用.env.mZone_Poker_Pro的變量運行do_everything趁餐。

但是如果你想一次為所有目標運行所有命令呢?

打開Fastfile篮绰。 在do_everything下面后雷,添加:

  def execute_for_all_envs
    # 1
    schemeList = Dir.glob(".env.*”)
    # 2
    schemeList.each do |file|
      # 3
      Dotenv.overload(file)
      # 4
      yield
    end
  end

這個方法:

  • 1) 放入當前目錄的.env. files into an array
  • 2) 遍歷每個.env文件吠各。
  • 3) 使用當前.env文件重載ENV臀突。
  • 4) 執(zhí)行execute_for_all_envs調用后的塊。

然后贾漏,要從do_everything調用execute_for_all_envs候学,請將do_everything的內容替換為:

    if ENV['SCHEME'] != nil
      create_app
      screenshot
      build
      upload
    else
      execute_for_all_envs{ do_everything }
    end

現(xiàn)在,如果未在命令行中指定環(huán)境纵散,則ENV ['SCHEME'] == nil梳码,因此execute_for_all_envs運行。 execute_for_all_envsENV設置為第一個環(huán)境伍掀,返回到調用塊掰茶,然后重新運行do_everything

do_everything為該環(huán)境完成所有操作后蜜笤,execute_for_all_envs中的循環(huán)繼續(xù)并返回下一個環(huán)境濒蒋,依此類推。

現(xiàn)在你可以運行:

bundle exec fastlane do_everything

當你坐下來放松時把兔,讓fastlane為兩個目標做所有繁重的工作沪伙。

fastlane還支持TestFlight提交和大量集成。 您可以自定義您的lane县好,以提供有關Slack的實時反饋围橡,與Jira boards交互等。訪問官方fastlane網(wǎng)站(the official fastlane website)以了解更多信息缕贡。

后記

本篇主要講述了fastlane自動化打包某饰,感興趣的給個贊或者關注~~~

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末儒恋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子黔漂,更是在濱河造成了極大的恐慌诫尽,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炬守,死亡現(xiàn)場離奇詭異牧嫉,居然都是意外死亡,警方通過查閱死者的電腦和手機减途,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門酣藻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鳍置,你說我怎么就攤上這事辽剧。” “怎么了税产?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵怕轿,是天一觀的道長。 經(jīng)常有香客問我辟拷,道長撞羽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任衫冻,我火速辦了婚禮诀紊,結果婚禮上,老公的妹妹穿的比我還像新娘隅俘。我一直安慰自己邻奠,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布为居。 她就那樣靜靜地躺著惕澎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪颜骤。 梳的紋絲不亂的頭發(fā)上唧喉,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音忍抽,去河邊找鬼八孝。 笑死,一個胖子當著我的面吹牛鸠项,可吹牛的內容都是我干的干跛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼祟绊,長吁一口氣:“原來是場噩夢啊……” “哼楼入!你這毒婦竟也來了哥捕?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤嘉熊,失蹤者是張志新(化名)和其女友劉穎遥赚,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阐肤,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡凫佛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了孕惜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片愧薛。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖衫画,靈堂內的尸體忽然破棺而出毫炉,到底是詐尸還是另有隱情,我是刑警寧澤削罩,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布瞄勾,位于F島的核電站,受9級特大地震影響鲸郊,放射性物質發(fā)生泄漏丰榴。R本人自食惡果不足惜货邓,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一秆撮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧换况,春花似錦职辨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至觉吭,卻和暖如春腾供,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鲜滩。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工伴鳖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人徙硅。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓榜聂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嗓蘑。 傳聞我的和親對象是個殘疾皇子须肆,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容