Tạo môi trường Staging cho iOS project sử dụng Firebase
Bước 1: Thiết lập trên Firebase Console
Thay vì dùng chung một Project, cách an toàn nhất là tạo hai Firebase Projects riêng biệt.
- Project 1 (Production): Ví dụ
MyAwesomeApp-Prod - Project 2 (Staging): Ví dụ
MyAwesomeApp-Staging - Trong mỗi Project, hãy thêm một iOS App. Bạn nên dùng Bundle ID khác nhau để có thể cài đặt cả hai bản app trên cùng một điện thoại:
- Prod:
com.yourcompany.app - Staging:
com.yourcompany.app.stg
- Prod:
- Tải cả hai file
GoogleService-Info.plistvề máy. Đổi tên chúng để dễ phân biệt (ví dụ:GoogleService-Info-Prod.plistvàGoogleService-Info-Stg.plist).
Bước 2: Cấu hình Build Configurations trong Xcode
Chúng ta cần tạo ra các “môi trường” bên trong Xcode.
- Mở dự án Xcode -> Chọn Project (không phải Target).
- Tại tab Info, tìm mục Configurations.
- Nhấn nút + và chọn “Duplicate ‘Debug’ Configuration”, đặt tên là Staging.
- Lặp lại nếu bạn muốn có cả bản Release (Staging).
Bước 3: Phân tách Bundle Identifier
Để hai app có thể “sống chung” trên một thiết bị:
- Chọn Target của app -> Tab Build Settings.
- Tìm từ khóa Product Bundle Identifier.
- Mở rộng mục này ra, bạn sẽ thấy các hàng tương ứng với các Configuration đã tạo.
- Chỉnh sửa giá trị:
- Debug/Staging:
com.yourcompany.app.stg - Release:
com.yourcompany.app
- Debug/Staging:
Bước 4: Tổ chức file GoogleService-Info.plist
Bạn cần đưa cả hai file plist vào Xcode nhưng không được tick vào mục “Add to targets”. Chúng ta sẽ dùng script để copy file phù hợp vào app khi build.
- Tạo một thư mục trong project (ví dụ:
FirebaseConfig). - Bỏ file
GoogleService-Info-Stg.plistvàGoogleService-Info-Prod.plistvào đó. - Tại Tab Build Phases, nhấn dấu + -> New Run Script Phase.
- Đặt tên script là “Firebase Environment Selector” và dán đoạn mã sau:
Bash
# Đường dẫn tới thư mục chứa file cấu hình
PATH_TO_CONFIG=$SRCROOT/$PROJECT_NAME/FirebaseConfig
if [ "${CONFIGURATION}" == "Staging" ] || [ "${CONFIGURATION}" == "Debug" ]; then
cp -r "${PATH_TO_CONFIG}/GoogleService-Info-Stg.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist"
echo "Using Staging Firebase config"
else
cp -r "${PATH_TO_CONFIG}/GoogleService-Info-Prod.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist"
echo "Using Production Firebase config"
fi
Bước 5: Kiểm tra trong Code (Tùy chọn)
Nếu bạn cần thay đổi logic code tùy theo môi trường (ví dụ: URL API khác nhau), bạn có thể thêm Swift Compiler Custom Flags.
- Vào Build Settings -> Tìm Other Swift Flags.
- Tại dòng Staging, thêm flag
-DSTAGING. - Trong code, bạn có thể kiểm tra:
Swift
#if STAGING
print("Đang chạy môi trường Staging")
let apiURL = "https://staging-api.example.com"
#else
print("Đang chạy môi trường Production")
let apiURL = "https://api.example.com"
#endif
Bước 6: Cách chạy
Bây giờ, khi muốn test bản Staging:
- Nhấn vào Scheme của App (cạnh nút Play) -> Edit Scheme.
- Tại mục Run -> Tab Info, đổi Build Configuration thành Staging.
- Build và Run. App của bạn sẽ tự động kết nối với Database/Auth của Firebase Staging.
Lưu ý quan trọng:
- Firebase SDK: Đảm bảo bạn gọi
FirebaseApp.configure()trongAppDelegatenhư bình thường. Script ở Bước 4 sẽ lo việc nạp đúng file cấu hình cho nó. - Push Notifications: Bạn sẽ cần upload cả 2 chứng chỉ APNs (một cho Prod, một cho Staging) lên từng project Firebase tương ứng.
