讓你的iOS應用在不同狀態(debug, release)有不同的圖示和標題
應用在釋出到 App Store 之前, 大家都會把應用通過 Ad Hoc 形式發給內部人員進行小範圍的測試, 我們把應用的這個狀態稱為 Staging. 這些人員大多都沒有參與過應用, 目的是用來模擬真實使用者的操作行為和流程, 以此來找到一些更不容易發現的 Bug.
前段時間我們在準備釋出 NextDay 4.0 的時候, 也是這樣. 但問題也隨之而來了. 大家的 iPhone 上都裝有 App Store 版本的 NextDay, 內部測試的 Ad Hoc 版本裝上去以後, 圖示與名字都和正式版一樣, 很難區分. 而我自己的手機上還有 Debug 版本的應用, 這一下就三個了. 所以我就花時間找了一些方法來讓不同版本 (不是版本號, 是 Debug, Staging, AppStore 這樣的版本) 的同一個應用有各自不同的 Icon 和名字. 這樣就避免了上面碰到的問題.
準備工作
首先, 不同版本的應用要有不同的 Bundle ID. 如果你的應用原來的 Bundle ID 是 com.mycompany.myapp, 那麼這幾個版本你可以這麼命名:
- com.mycompany.myapp.debug Debug (Alpha) 版本
- com.mycompany.myapp.adhoc Staging (Ad Hoc, Beta) 版本
- com.mycompany.myapp App Store (Production) 版本
然後對應的 Provisionng Profile 也都要準備好. 不用我說了吧.
設定
1.Build Configurations
首先是新增 Configurations, 位置見下圖所示. 專案之前已經有了 Debug 和 Release 兩個配置, 可以分別對應咱們的 Debug 版本和 App Store 版本. 所以咱們只新增一個 Staging 版本就可以了. 我為了能讓新增的版本按字母序排列在 Debug 和 Release 中間, 用的名字是 “ForBeta”.
這步完成後, 你會在 Build Settings 裡看到所有的設定都有了三個子選項, 分別對應三個不同的 Configuration.
2.Schemes
然後, 我們在專案裡需要有兩個 Scheme. 這兩個 Scheme 在 Debug 時候的行為是一樣的, 但在 Archive 的時候, 一個用於 Staging 版本釋出內部測試, 一個用於 App Store 釋出.
Scheme 的設定入口在選單上: “Product” -> “Scheme” -> “Manage Schemes”. 我的兩個 Scheme 命名如圖:
對應 App Store 的 Scheme 設定裡, Run 和 Test 的 Build Configuration 都使用 Debug, Profile 和 Archive 使用 Release.
對應 Staging (Beta) 的 Scheme 設定裡, Run 和 Test 也用 Debug, Profile 和 Archive 使用 ForBeta.
有了這裡的設定, 咱們就可以通過切換 Scheme 來 Archive 出分別用於 Ad Hoc 釋出和 App Store 釋出的 App 了.
3.App Icon
接著就是 Icon. 現在大家應該都用 Xcode 5 了吧! 既然用了, 那就多用用新功能, Icon 設定這塊我使用了 Media Assets. 如果你的老專案還沒有啟用, 那就麻煩你在對應 Target 的 General 下啟用一下.
在 Media Assets 中 (在專案中的預設名字應該是 Images.xcassets), 點選選單 “Editor” -> “New App Icon”, 建立兩個新的 App Icon, 分別對應 Debug 和 Staging 版本. 然後把之前準備好的圖示分別拖進去. 如圖:
設定好 Media Assets 後, 還要在對應 Target 的 Build Settings 裡分別設定不同版本使用不同的 App Icon. 如圖:
這樣設定好, 不同版本的應用就擁有了各自不同的圖示了.
4.Bundle ID
再下來就是按照我們前面定義的 Bundle ID 和各個版本的對應關係來進行設定了.
我們需要在 Build Settings 中定義一個變數. 入口在: “Editor” -> “Add Build Setting” -> “Add User-Defined Setting”.
然後在對應 Target 的 Info 裡把 Bundle ID 設定為我們剛才定義的變數.
這樣, 專案在使用不同的配置檔案編譯的時候就能分別利用不同的 Bundle ID 了.
5.App Name
設定了圖示, 如果覺得有必要把應用名稱也順便區分一下的話, 也是可以的.
我們需要在 Build Settings 中再定義一個變數. 比如我是這麼定義的:
然後在應用名稱的設定那裡使用這個變數:
經過上面的一系列設定, 我現在在 Xcode 裡只需要在左上角簡單切換一下 Scheme 就可以很方便的編譯出各個我需要的應用版本. 媽媽再也不用擔心我釋出應用了!