Flutter 動態配置多環境 - iOS Scheme 配置
iOS app 同樣也有區分 app 名稱和套件名稱的需求,但現在嘗試帶 --flavor 參數建置 iOS 版 app 的時候,會得到以下訊息:
字面上的意思是沒有設定自訂 Scheme,稍後要移至 Xcode 進行建立 Scheme 的程序。建立自訂 Scheme
在 VS Code 對著 ios 資料夾按右鍵,在選單中點擊 Open in Xcode。
在 Android Studio 是在選單中點擊 Flutter -> Open iOS module in Xcode。
出現 Xcode 後,點擊目標選擇器,在出現的選單中點擊 New Scheme…
Target 要選擇 Runner,Name 要輸入與 EnvName 相符的數值,本例為「dev」。並以相同方式建立 beta 的 Scheme。
對著預設的 Runner 按下 Return(Enter) 鍵,重新命名為「prod」。完成每個 Scheme 的建立。
再次嘗試建置 Flutter app ,仍然出現錯誤訊息。
大意是要在 Debug 模式執行 prod 組態,預期會有名為 Debug-prod 的建置設定,但是現在沒有。
建立 Xcode 建置設定
點擊專案檔 -> PROJECT 下的 Runner -> Info 標籤。在 Configurations 建立所需的設定
Flutter iOS 模組預設存在這 3 種設定:- Debug
- Release
- Profile
這是對應 Flutter 支援的建置模式,稍後會以這些設定,延伸出本範例需要的設定檔。
更詳細的說明,可見〈Flutter 的构建模式选择〉。
按下+按鈕,點擊 Duplicate "Debug" Configuration 選項。在複製出來的項目中,重新命名為「Debug-dev」。其中 Debug 是 Flutter 支援的建置模式之一,dev 是本範例自訂的組態。
以同樣的方式建立「Release-dev」、「Profile-dev」,成果如附圖。
以同樣的方式處理 beta 組態,成果如附圖。
最後將預設的設定名稱,重新命名為 prod 適用的資訊,成果如附圖,完成設定檔的建立。
使每個 Scheme 對應到指定的建置設定(Build Configurations)
Prod 是從預設的設定檔更名來的,已經準備好了,其他的組態可以參考 Prod 的內容。
點擊目標選擇器,在出現的選單中點擊 Manage Schemes…
點擊 beta 項目 -> 左下角的 Edit。
(以 beta 為例)點擊 Run 項目,將 Build Configuration 中的項目變更為「Debug-beta」。
點擊 Profile 項目,將 Build Configuration 中的項目變更為「Profile-beta」。
點擊 Analyze 項目,將 Build Configuration 中的項目變更為「Debug-beta」。
點擊 Archive 項目,將 Build Configuration 中的項目變更為「Release-beta」。
到這裡完成 beta 組態的設定,以此類推將 dev 組態設定完畢後,就能自訂 app 名稱和套件名稱。
自訂 Bundle ID(套件名稱)
點擊專案檔 -> TARGETS 底下的 Runner -> Build Settings 項目,搜尋關鍵字找到 Packaging 區塊中的 Product Bundle Indentifier 項目。
對著 Debug-beta 旁的數值連點 2 下,將適用於 beta 組態的套件名稱變更為指定的名字,按下 Return (Enter) 鍵確認變更。本例為「com.example.buildFlavorDemo.beta」。
對 dev 組態相關的設定做同樣的操作,成果如附圖。
到這裡完成套件名稱的設定,本例的 prod 維持現狀即可。
自訂 app 顯示名稱
按下+號,點擊 Add User-Defined Setting。
為新項目命名為「APP_DISPLAY_NAME」,點擊旁邊的箭頭,就會看到每個建置設定對應的數值(現在是空白的)。
以和命名套件名稱相同的方式,為每個項目的 app 名稱命名,成果如附圖。
最後在這裡的 Display Name 輸入變數「$(APP_DISPLAY_NAME)」套用。
分別建置每個組態,就能在設備上看到不同版本的產品。也因為有各別的套件名稱,不會取代彼此。
補充:使用中文輸入法的實作注意事項
如果發生明明字有寫對,但是會提示不支援這個 flavor 時,要注意 Xcode 的 Scheme 是否有夾帶特殊(看不到)的字元,這個問題可能會發生在使用中文輸入法的開發者身上。
留言
張貼留言