編輯:關於Android編程
激動人心的時刻到來了:你花了幾天和幾周時間(甚至是幾個月)制作了一個精彩的 App,准備發布到全世界。剩下來的事情就是將 App 提交到蘋果商店了,但是 —— 嗯?咋個提交個 App 就這麼難呢?
針對各種支持的設備和語言抓取屏幕截圖完全是一個充斥著大量枯燥乏味的重復性工作的過程。啊!還有讓人無力吐槽的編譯過程。你不禁會想:難道沒有更好的辦法嗎?
能不能只要一條命令,不管支持什麼樣的設備和語言,就可以自動生成所有的屏幕截圖?能不能只要一條命令,就能上傳這些截圖,生成 provisioning profile,並提交 App ?這會節省多少時間?
感謝 Felix Krause, 才有了為我們解決這個問題的工具。它會是你最好的朋友!
fastlane 是一套工具,幫助你簡化和自動化 App 發布或部署的過程,將之變成一條平直的工作流。通過 fastlane,你可以實現 持續分發(CD,一種用於自動化和改進軟件分發過程的設計實踐)。
通過 fastlane 內置的工具,你可以創建一個由 build task (又叫做 lane)構成的有序列表,你只需要點擊一個按鈕就可以將 App 發布到 App 商店。你可以節省大量的時間,用於提升軟件質量,或者縮短團隊中發布者的發布周期。
在本教程中,你將學習如何設置 fastlane,了解它的工具集,並用它來發布一個示例 app。接下來你會嗨到爆,安全帶系好了嗎?
注意:本文主要使用命令行。你不一定要是命令行高手,但必須知道一些關於終端和命令行的知識。
另外,本文假設你知道如何進行代碼簽名以及使用過 iTunes Connect。如果你不熟悉這些主題,請先閱讀這些教程。
下載本文使用的項目,將它保存到任意地方。
示例 App 叫做 mZone,是一個用在無限額德州撲克錦標賽的計算器。它會根據你的籌碼和當前大盲注提出一個出牌建議:
首先,要讓 fastlane 能夠運行,你需要安裝:
OS X 10.9 (Mavericks) 以上 Ruby 2.0 以上 Xcode 擁有一個付費的蘋果開發者賬號因為 fastlane 其實是一個 Ruby 腳本的集合,你必須安裝正確的 Ruby 版本。 OS X 10.9(Mavericks) 以後默認安裝的是 Ruby 2.0 本。你可以在終端窗口中用下列命令來確認:
ruby -v
然後檢查 Xcode 命令行工具(CLT)是否安裝。在終端窗口中輸入命令:
xcode-select --install
如果 Xcode CLT 已經安裝,則會報如下錯誤:
command line tools are already installed, use "Software Update" to install updates.
如果未安裝,終端會開始安裝 CLT。
當這些要求滿足後,你就可以安裝 fastlane 了。輸入下列命令:
sudo gem install fastlane -v 1.32.1 --verbose
注意,書寫本文時 fastlane 是 1.32.1 版本 。當你閱讀本文時,很可能會有更新版本。新版本的配置和用法可能會有所不同,你可以查看在每個任務之後顯示的更新信息。
輸入超級管理員密碼,終端窗口會打印一堆進度信息,表示安裝進程。安裝需要花幾分鐘時間,倒一杯咖啡,溜溜狗,或者玩一下 zombie-fighting tactics 游戲 :]
安裝完成後,你就可以在項目中配置 fastlane 了。但在配置項目之前,我們先來了解一下 fastlanme 中都包含了什麼工具。
在 fastlane 這個大家庭中,包含了下列工具:
produce 創建可用於 iTunes Connect 和 Apple Developer Portal 的 iOS app。 cert 自動創建和維護 iOS 代碼簽名證書。 sigh 創建、更新、下載和修復 provisioning profiles。 snapshot 自動將 App 屏幕截圖本地化到每種設備上。 frameit 將屏幕截圖適配到適當的設備屏幕大小。 gym 創建和打包 iOS app。 deliver 上傳屏幕截圖、元數據和 App 到 App 商店。 PEM 自動創建和更新 Push 通知的 profile。在部署實例 App 的過程中,這些工具中的大部分工具你都會用到。
理論部分結束了——接下來讓我們到快車道上體驗一下 fastlane (fastlane 即快車道)吧!
首先,打開終端窗口,cd 到 mZone 項目目錄。進入 mZone 文件夾之後,輸入下列命令
fastlane init
注意:如果你看到一個 “permission denied” 錯誤,你可能要在命令前加上 sudo。
幾分鐘之後,fastlane 會通過詢問下列問題,引導你完成設置過程:
是否開始?這會移動你的 Deliverfile 和 Snapfile(如果存在)(y/n)打開 mZone 項目文件夾。你會發現多了一個 fastlane 文件夾,其內容如下:
其中:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCkFwcGZpbGUsINPD09q05rfFIGFwcCBJRCC6zcTjtcQgQXBwbGUgSUShoyBGYXN0ZmlsZSwg08PT2rncwO3E48v5tLS9qLXEIGxhbmWjrGxhbmUg1PK74bX308MgYWN0aW9uoaMgU25hcGZpbGUsINPD09rWuLao0OjSqr340NDGwcS7vdjNvLXEyeixuMDg0M26zdPv1tahoyA8L2NvZGU+PC9jb2RlPjwvY29kZT48L2NvZGU+DQo8cD65p8+yxOOjocTjz9bU2r/J0tTKudPDIGZhc3RsYW5lIMHLoaM8L2NvZGU+PC9jb2RlPjwvY29kZT48L2NvZGU+PC9wPg0KPGgyIGlkPQ=="生成證書和-provisioning-profile">生成證書和 Provisioning Profile
在任意文本編輯器中打開 Fastlane 文件,將內容替換為:
# Minimum version of fastlane fastlane_version "1.32.1" default_platform :ios platform :ios do # 1 desc "Creating a code signing certificate and provisioning profile" # 2 lane :provision do # 3 produce( app_name: 'ENTER_A_UNIQUE_APP_NAME_HERE', language: 'English', app_version: '1.0', sku: '123abc' ) # 4 cert # 5 sigh(force: true) end error do |lane, exception| # This block is called, if there was an error running a specific lane. end end
將 ENTER_A_UNIQUE_APP_NAME_HERE 替換成一個唯一的 App 名字——我建議用 mZone 加上你的 email 地址或者其它唯一性文本。你的 iTC 用戶名和 app ID 通過 Appfile 文件加載,因此這裡不需要手動指定。
如果你之前從來沒有用過 Ruby,這些代碼對你來說可能難於理解,所以這裡順便解釋一下:
用於描述這個 lane 的工作。一個 lane 是一個按順序執行的工作流。 執行名為 provision 的 lane。 produce 用指定的 ID、name、語言和版本號創建一個可用於 iTunes Connect 和 Developer Portal 的 app。 cert 創建一個新的私鑰和簽名請求,下載、安裝生成的證書並導入到鑰匙串。 sigh 創建了一個 provisioning profile。force 參數為 true,則每次運行時都會創建新的 provisioning profile,這樣就可以保證每次都使用正確的代碼簽名證書。注意:sigh 默認創建的是 App Store 的發布 profile。如果你想創建 ad hoc profile,你需要使用 sigh(adhoc:true)。如果是開發 profile 則使用 sigh(development:true)。為簡單起見,在本文中你只需要創建 distribution profile。
哇!你創建了第一個 lane。保存文件,打開終端進入到項目文件夾,輸入命令:
fastlane provision
這會讓 fastlane 執行 provision lane。
大約一分鐘左右,fastlane 會問你 iTunes Connect 密碼,它會保存到你的 Mac 的鑰匙串裡。輸入密碼,如果執行成功,你的終端窗口會顯示如下:
注意:如果你看到錯誤,例如 “Creation of apps of this type is not available”, 則請登錄你的 iTunes Connect,看一下是否有某些更新的協議需要你確認。
在進行下一步之前,你還需要在 Xcode 中進行某些修改。打開 mZone Poker.xcodeproj,選擇 mZone Poker Target,切換到 General 頁。將 bundle identifier 修改為初始化 fastlane 時輸入的 App ID。
在 Build Settings > Code Signing > Provisioning Profile 設為 “ <新的 app ID> AppStore”。然後在 Code Signing Identity 選擇和這個 provisioning profile 相對應的 ID:
注意,code signing identity 應該和 provisioning profile 中的 identities 相匹配。這樣,當 gym 編譯 IPA 文件時會使用新創建的 provisioning profile。
登錄進 iTunes Connect,哇喔!你的 app 已經創建好了,太酷了!
只需要一條命令,你就在 iTunes Connect 和 Dev Portal 中創建了一個 app 和一個 provisioning profile。你的工作一下子就節省了幾個小時!:]
在提交 app 時,上傳屏幕截圖是最無聊的工作之一。你的 app 用得越廣泛(也就是說支持的語言和設備類型越多),你花在屏幕截圖上的工作越多。真 tm 痛苦啊!
mZone 支持兩種語言,英語和法語,以及 4 種屏幕尺寸。如果每個設備針對一種語言需要 5 張截圖,則你需要 40 張截圖!使用 fastlane,你只需要一條命令就可以完成這個工作!
打開 fastlane 文件夾下的 Snapfile 文件,將內容替換為:
# A list of devices you want to take the screenshots from devices([ "iPhone 4s", "iPhone 5", "iPhone 6", "iPhone 6 Plus" ]) # A list of supported languages languages([ 'en-US', 'fr-FR' ]) # Where should the resulting screenshots be stored? screenshots_path "./screenshots" # Clears previous screenshots clear_previous_screenshots # Latest version of iOS ios_version '9.1'
將設備類型、語種設置為你想支持的類型和語言。clear_previous_screenshots 一句會清空上次創建的截屏圖。
保存、關閉文件。
打開 Fastfile 文件,在 error do |lane, exception| 一句上面加入:
desc "Take screenshots" lane :screenshot do snapshot end
這裡創建了一個新的 lane,名為 screenshot,並使用 snapshot 命令根據你在 Snapfile 文件中輸入的配置創建截屏圖。
保存文件,在終端窗口中輸入:
fastlane screenshot
稍等一會 … 截屏圖在你什麼都沒做的情況下生成了!歡呼吧,你不再需要做那些無味的重復工作了 :]
注意:本文使用的 snapshot 版本使用了 UI Automation 和 JavaScript(為了調用模擬器)。但在 snapshot 1.0,則使用了 Xcode 7 的 UI Testing,一次你可以用 Swift 或 Objective-C 來編寫你的自動化腳本。
注意:snapshot 為了截取屏幕,需要調用 Snapfile 中列出的設備類型所對應的模擬器。如果缺少了一種或多種模擬器,你要 Xcode 中通過 Window\Devices 菜單來添加相應的模擬器。左下角的 + 號按鈕就是用來添加新模擬器的。
命令執行完後,找到 mZone 項目文件夾下面的 fastlane 目錄,你會看到多了一個 screenshots 子目錄:
現在,所有設備的英語和法語的屏幕截圖都有了。你還會發現一個 screenshots.html 文件。打開這個文件,可以浏覽所有的屏幕截圖。
所有屏幕截圖的生成只消要一條命令——沒有比這個更省事的了!
注意:如果出現錯誤 ambiguous simulator name,刪除某幾個模擬器或者修改 Snapfile 即可。
snapshot 可以和 Xcode 的 UI test 配合工作。UI test 能夠截取 app 某一部分的屏幕內容,因此它在測試中用得更多一些:]
不再需要創建屏幕截圖固然省事,但提交 App 中真正費事的是編譯 app 和代碼簽名。你猜對了 —— fastlane 也可以幫你干這個!
打開 Fastfile,在 screenshot lane 之後添加:
desc "Create ipa" lane :build do gym end
這裡創建了一個 lane 叫做 build,它使用 gym 命令創建簽名的 ipa 文件。
保存 Fastfile,打開終端窗口,進入 mZone 項目文件夾,輸入命令:
fastlane build
這會執行 build lane,開始編譯。一旦編譯完成,打開 mZone 項目文件夾。你會看到簽好名的 ipa 文件:
搞定!只消一行命令就搞定 iOS 開發中公認的最繁瑣和最不可理喻的工作。
要上傳屏幕截圖、元數據和 IPA 文件到 iTunes Connect,可以使用 deliver 命令,它已經包含在 fastlane 中了。
首先,需要用 deliver 來初始化項目。在終端窗口,進入項目文件夾輸入命令:
deliver init
執行完成,終端窗口應當顯示如下:
在 summary 欄中,你會看到 deliver 已經自動檢測到 ipa 文件和屏幕截圖的位置。
它還會創建一個 metadata 文件夾以及一堆文本文件。這些文本文件中包含了一些常見的 App Store 對象,比如 description、keywords 和 categories 等。
一般,你需要填寫這些信息,但在本教程中,只需要填寫一個簡單描述。打開 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.
在這裡,你需要解決一個 Bug。打開 metadata 文件夾。你會看到我們的 app 明明支持英語和法語,但你只看到一個 en-US 文件夾。
要解決這個 Bug,拷貝一份 en-US 文件夾並更名為 fr-FR。現在,你的項目文件夾應當如下圖所示:
打開 Fastfile 在 build lane 後面添加:
desc "Upload to App Store" lane :upload do deliver end
在終端窗口中,輸入命令:
fastlane upload
通過這個命令,fastlane 會創建一個 html 文件,它將以 html form 表單的形式上傳文件。
預覽 html,如果一切正常,則在問題 “Does the Preview on path ‘./Preview.html’ look okay for you? (y/n)” 後面回答 y。
這時你可以稍微休息一下,讓電腦為你工作 :] 當執行成功後,你的終端窗口應當顯示如下:
登錄你的 iTunes Connect。所有的屏幕截圖、描述、版本 build 1.0 都應當上傳就緒。
剩下來的事情就是點擊 “Submit for Review” 按鈕。
等等!還要手動登錄並點擊按鈕?我以為這一切都應該是自動的!
是的,deliver 確實可以自動提交 app 去審核,但你需要修改 upload lane:
desc "Upload to App Store and submit for review" lane :upload do deliver( submit_for_review: true ) end
提醒:比起你之前沒有使用 fastlane 的日子,你可能會覺得手上一下子多出那麼多時間會挺難受的,但我相信你一定會習慣的 :]
今天,你學習了如何使用 fastlane 發布 app 來節省大把時間。要讓 fastlane 能夠正常工作只需要不多的幾個步驟,而其中很大一部分又是在初始化時候。
fastlane 還提供很多定制 lane 的工具,比如支持在 Slack 中實時反饋信息、允許單元測試、部署 TestFlight build 以及提交 app 到商店等等。
要進一步了解這些神奇的工具,請浏覽 fastlane 官方網站。
希望你喜歡這篇教程,並在發布 app 時用好 fastlane 這個工具。
可以分為下面的幾部分:使用支持庫創建一個Fragment創建一個動態UI多個Fragment之間的通信 1、使用支持庫如果您的應用需要運行在3.0及以上的版本,
記錄下一個很實用的小控件EditTextWithDel,就是在Android系統的輸入框右邊加入一個小圖標,點擊小圖標可以清除輸入框裡面的內容,由於Android原生Ed
場景:1. 突然接到Android的開發任務時如何配置android開發環境?2. 現在的android studio是基於idea的,在我的電腦上運行奇慢和卡(雙核i5
搭建React-native環境首先你必須要裝好JAVA JDK,然後版本要在1.8以上.下載1.8 版本(64位或32位SDK) 下載網站-http://www.ora