Xcode

如何使用Xcode Configuration 管理 iOS Apps 不同構建版本

如何使用Xcode Configuration 管理 iOS Apps 不同構建版本
如何使用Xcode Configuration 管理 iOS Apps 不同構建版本
In: Xcode

在軟體專案的開發生命週期中,一般來說,會在不同的階段創建不同的版本。在初期階段,會有一個本地端的配置版本,即將進入下一個階段時,需要提供另一個版本讓QA團隊來測試功能和修復bugs,當應用程式通過所有測試並獲得QA團隊的認可後,在推送到App Store之前,會需要創建另一個版本,將其發送給客戶進行beta測試,一旦客戶對你發送的構建版本感到滿意,就算是production-ready的應用程式,而其中這些構建版本不完全相同,每一版都有一些特殊目的,配置都會略有不同。

例如,若應用程序需要串連後端,則應用程式很可能在QA測試期間連接到測試環境,該版本可能配置了一個測試URL,當進入到下一個階段後,另一個建置版本則需要一個用於連接到staging/production server的URL,最重要的是,當錯誤發生時,各個建置版本應該顯示不同層級的提示訊息。

如何在Xcode中有效率的管理所有構建版本,而且是在相同的code base上?這是我想在本教程中討論的內容,並向讀者展示如何在Xcode的幫助下創建多個配置。

如何管理多個構建版本?

其實有多個方法可以實現它,其中一個是創建不同的targets,每個target使用不同的Info.plist,每選擇一個target,就會使用不同的Info.plist,因此可以藉此設置變數,如token或是不同版本的URL。

這也可以使用Bundle Identifiers來實現,定義不同的preprocessor macros控制各個代碼塊的編譯條件。

Eugene Trapeznikov已經在下列這個優秀的教程中介紹了這種方法,如果你還沒有看到,請閱讀他的教程 – How to Use Xcode Targets to Manage Development and Production Builds,這篇文章涵蓋所有重要概念。

另一種方法是將你的構建配置設定放到.xcconfig文件中,並且在專案的info內引用它。然後可以透過簡單更改scheme來構建不同版本的應用程式,這也是我將在本教程中帶領讀者學習的重點,把構建配置(build configuration)設定放到檔案內,將是配置管理(configuration management)的巨大勝利。

建立Build Configuration

首先,讓我們使用Xcode創建一個新專案。或者是你想要從現有專案開始進行也沒問題,在項目導航器(project navigator)中選擇頂層的element,並確認PROJECT的“YOUR_PROJECT_NAME”項目已被選取,完成之後,應該會看到Xcode已經為你提供了兩個不同的配置級別:DebugRelease,你可能之前沒有意識到,它代表你可以透過不同的設置,分別創建一個用於debug,另一個用於release的版本。

現在我們要創建一個新的Configuration。我們把它叫做“Staging”。點擊配置列表下面的+號,然後選擇”Duplicate Debug configuration”,因為從Debug配置中刪除我們不需要的東西,比在Release配置放回所需的東西容易得多。

在剛出現的第一個單元格中,填寫Staging,完成這個動作後,你現在有三個級別的配置。

使用Xcode配置文件(.xcconfig)

如上所述,我們使用Xcode配置文件(.xcconfig)取代conditional compilation blocks,來管理構建設置(例如token、api keys,以及與後端串接使用的urls)。

如果你不知道Xcode配置文件(.xcconfig) 是什麼,它實際上是一個基於key/value的文件,你可以透過key/value的形式存儲構建設置,類似於我們所用的dictionaries,通過使用.xcconfig文件,為每個構建定義構建參數非常容易,你會在接下來的教程內容中明白我的意思。

現在回到專案來創建一個.xcconfig文件,在項目導航器中,右鍵點擊專案文件夾並選擇New file…. 在彈出的視窗中選擇Configurations Settings File。 在下一個畫面中,將其命名為“Staging”,並確保targets複選框全部都是未選取狀態,因為我們不希望將其包含在應用程式的bundle中。

現在進入你專案的info頁面中,在Configurations這個Section下展開列表,並從下拉框中選擇xcconfile “Staging”

staging-configuration-file

完成後,你可以選擇Debug重複該流程,同樣的,我們也對Release重複這個操作。

staging-configuration-file-2

更改構建資訊(Changing the Build Information)

一旦你有Xcode的配置文件設置,就可以非常直接的改變構建內容。假設你想要改變構建資訊,如應用程式名稱、應用程式版本,或是bundle identifier以及每個版本的bundle version,你可以像這樣編輯每個.xcconfig文件:

Debug.xcconfig:

IS_APP_NAME = Donate Debug
IS_APP_VERSION = 0.3
IS_APP_BUNDLE_ID = com.intensifystudio.DonateDebug

Staging.xcconfig:

IS_APP_NAME = Donate Staging
IS_APP_VERSION = 0.2
IS_APP_BUNDLE_ID = com.intensifystudio.DonateStaging

Release.xcconfig:

IS_APP_NAME = Donate
IS_APP_VERSION = 0.1
IS_APP_BUNDLE_ID = com.intensifystudio.DonateRelease

你可以在project settingsinfo.plistentitlement files中使用你的配置變數(configuration variables)。在本文範例中,我們將在info.plist中使用它改變app名稱app版本bundle identifier,如下所示:

為了看得更清楚,我將自己開發工作室的名稱IntensifyStudio,用來作為一個自定義前綴詞“IS”,以便與預設內容做出區別。

提醒:更改bundle identifier將需要創建更多配置文件。

更改App Icon

使用Xcode配置文件,你現在可以輕鬆配置不同版本的app icon,自定義不同版本app icon的過程與前面章節中展示的過程相同,只是該變量將在Build settings中使用。 參考下列做法編輯每個.xcconfig文件:

Debug.xcconfig:

IS_APP_ICON = AppIconDebug

Staging.xcconfig:

IS_APP_ICON = AppIconStaging

Release.xcconfig:

IS_APP_ICON = AppIconRelease

完成後,切換到Build Settings,將AppIcon替換為變數${IS_APP_ICON}

然後在“Assets.xcassets”中創建幾套新的iOS App Icon,並按照順序重命名它們。

接著將你的圖像資料拖放進去,這樣就完成了!

透過程式碼存取變量

Xcode配置文件非常強大,它可以用於其他設置。比方說,如果不同版本的API密鑰和後端URL不同,則可以在每個.xcconfig文件中指定它們,然後透過你的程式碼中就可以存取到,以下提供一個範例:

Debug.xcconfig:

BACKEND_URL = http:\/\/api.intensifystudio.com/development
CONSUMER_KEY = ck_a57e4fa2e14c12ae3f400371cf2951ec3dea5_dev
CONSUMER_SECRET = cs_c847caa35ce1041e9c69d239141f13f63bb22b_dev

Staging.xcconfig:

BACKEND_URL = http:\/\/api.intensifystudio.com/staging
CONSUMER_KEY = ck_a57e4fa2e14c12f400371cf2951ec3dea5_staging
CONSUMER_SECRET = cs_c847caa35ce1041e9c69d239141f13f63bb22b_staging

Release.xcconfig:

BACKEND_URL = http:\/\/api.intensifystudio.com/
CONSUMER_KEY = ck_a57e4fa2e14c12f400371cf2951ec3dea5
CONSUMER_SECRET = cs_c847caa35ce1041e9c69d239141f1f63bb22b

接下來,通過建立新的欄位,將這些變量添加到Info.plist,如下圖所示:

你就可以使用下面的範例程式碼在運行時從plist文件讀取所需的值:

 
func infoForKey(_ key: String) -> String? {
        return (Bundle.main.infoDictionary?[key] as? String)?
            .replacingOccurrences(of: "\\", with: "")
 }
 

程式碼非常簡單,我們正在訪問Main Bundle來取得我們想要使用的資訊,接著,如果返回的值是一個URL,我們從字符中刪除所有反斜線(backslashes)。

在不同的構建配置之間切換

要在構建配置之間進行切換,只需按住Option鍵並點擊頂部的scheme即可更改scheme,然後可以選擇你偏好的build configuration。

總結

Xcode的Configuration file是配置不同build configuration的實用作法,使開發者可以輕鬆管理構建變數,你對這個教程有什麼想法嗎?如果對xcconfig有任何疑問,請在下方討論區告訴我們。

譯者簡介:陳奕先-過去為平面財經記者,專跑產業新聞,2015年起跨進軟體開發世界,希望在不同領域中培養新的視野,於新創學校ALPHA Camp畢業後,積極投入iOS程式開發,目前任職於國內電商公司。聯絡方式:電郵[email protected]

FB : https://www.facebook.com/yishen.chen.54
Twitter : https://twitter.com/YeEeEsS

原文Using Xcode Configuration (.xcconfig) to Manage Different Build Settings

作者
Ziad Tamim
Ziad 為高級 iOS 開發員、流動裝置策略指導及創業顧問。在App Store成立初期,Ziad已經開始編寫iOS程式及遊戲,為客戶編寫過超過80個程式。時至今日,他擁有個人的流動程式開發工作室 TAMIN LAB。歡迎到 Linkedin 與 Ziad 聯絡。
評論
更多來自 AppCoda 中文版
如何把 Swift DocC 文檔託管到 Web Server 或 GitHub
Xcode

如何把 Swift DocC 文檔託管到 Web Server 或 GitHub

Apple 在 Xcode 13 推出了文檔編譯工具 Swift DocC,讓開發者可以為專案創建漂亮的交互式文檔,我們還可以將把文檔託管在網站上。在這篇文章中,我會簡單介紹 Swift DocC,並教大家把程式碼文檔發佈到自己的網頁或 GitHub,與更多讀者共享文檔。
很好! 你已成功註冊。
歡迎回來! 你已成功登入。
你已成功訂閱 AppCoda 中文版 電子報。
你的連結已失效。
成功! 請檢查你的電子郵件以獲取用於登入的連結。
好! 你的付費資料已更新。
你的付費方式並未更新。