在軟體開發中,一個好的實踐是有多個環境,通常包括至少一個開發(或稱為「dev」)環境和一個生產(或稱為「prod」)環境。然而,不幸的是,有些開發者直接在生產環境中開發和測試新功能,這是一個相當冒險和不可取的做法。
🌝 本文將包含:
✔ 為何多環境在 Flutter 開發中至關重要。
✔ 傳統多環境管理方法的缺點。
✔ 官方使用 Flutter Flavor 的步驟。
✔ Flutter Flavorizr 自動化管理 Flavor 步驟
✔ 下一篇預告:Flutter 中的 CI/CD
1. 安全的測試環境
如果你的專案只有一個正式版的開發環境,不管是你或是測試人員,可能在很多條件的限制之下,只能躡手躡腳小心的測試,深怕自己成為弄壞環境的始作俑者。但這跟我們測試的目的恰恰相反,測試就是要窮盡可能性,去確保軟體的品質。
2. App 需要上架的時間更長
在做 App 的開發時,比其他任何環境都更需要使用 Flavor 做分層設計。如果是在 Web 或是 Backend 上出現錯誤,你還可以連夜修改搶救,但 App 發布了以後,你很難在第一時間就上版補救,只能任由事情發生(後面章節還會提到 Feature flag 的重要性)。
3. 增加迭代速度
在軟體開發過程中,迅速地完成並交付新功能以供測試和使用是一個重要目標。當我們擁有多個開發環境,特別是在 dev 環境中,我們可以更早地部署和測試新功能。這不僅提高了開發效率,也讓團隊能更快地收集反饋並做出相應的調整。
不要小看任何的微小改變,為團隊撬動的槓桿是非常巨大的。有了更靈活的開發環境,最直觀就可以帶來這些好處。
在尚未接觸過 flavor 前,我也試過使用多個main.dart
檔案來代表不同的環境,但這樣做會導致代碼重複和維護性下降。
main.dart
常常只是少數幾行不同,但需要維護多個檔案。Flutter Flavor 提供了一個更為統一和標準化的方式來管理不同環境的配置。它允許你在一個單一的代碼庫中容易地切換不同的環境設定,而無需更改代碼。
首先我會跟隨 Flutter 官方的教學,在 iOS 新增名為 dev 的 flavor,作為開發者的環境來作為演示。
選擇 New Scheme,並名為 DEV
Scheme: 定義了當你按下 "Build"、"Test"、"Profile" 等按鈕時會發生什麼。
Debug
, Release
, Profile
都複製一遍,並且加上我們 Scheme 的名稱作為後綴,如 Debug
→ Debug-dev
Build Configuration
,切換到 dev,如下圖二所示 Release → Release-dev。Bundle display name
變成 $(PRODUCT_NAME)
運行 flutter run --flavor dev
,就可以發現 App name 已經順利被我們更改成功了!
Build Setting
,找到 PRODUCT_BUNDLE_IDENTIFIER
改成相應的名稱即可。從上面的步驟可以看到,為了設定 Flavor 我們必須完成好多步驟。過程中如果不小心出錯,要 Debug 會非常困難耗費時間。好險有開發者社群,我們可以到 pub.dev 找到 flutter_flavorizr 這個庫一次完成所有設定。而且更棒的是他會協助我們產生對應環境的 Icon 分類,減少很多工作處理,絕對是必須大推的套件!
dev_dependencies
dev_dependencies:
flutter_flavorizr: ^2.2.1
flavorizr.yaml
flavors:
prod:
app:
name: 'App'
android:
applicationId: 'com.example.flutter_day_2_flavor'
ios:
bundleId: 'com.example.flutter_day_2_flavor'
macos:
bundleId: 'com.example.flutter_day_2_flavor'
dev:
app:
name: 'App DEV'
android:
applicationId: 'com.example.flutter_day_2_flavor.dev'
ios:
bundleId: 'com.example.flutter_day_2_flavor.dev'
macos:
bundleId: 'com.example.flutter_day_2_flavor.dev'
flutter pub run flutter_flavorizr
,Flavorizr 會幫助你切分設定檔中的 iOS 以及 Android 環境,讓你可以更集中化的管理每個不同的 Flavor 場景。執行完後,我們使用 flutter run --flavor dev
,來驗證確認 App 的名稱與 bundle 是否正確。希望透過這次的分享,能讓大家認識到 Flavor 的重要性,以及如何實際上手操作,加入自己的工作流程中。講解完 Flavor 後,明天會繼續帶大家認識如何做 Flutter 的 CI/CD 。這系列的文章會致力於完善 Flutter 的軟體開發流程,和一些我學習的成果分享如果文章對你有幫助或是喜歡這個系列歡迎追蹤互動呦!