Đây là bài dịch từ của một chia sẻ trên trang medium.com, bài viết nguồn mời các bạn xem ở đây: https://medium.com/@iboudhayan/managing-different-environments-and-configurations-for-ios-projects-7970327dd9c9


Là nhà phát triển iOS, chúng ta phải có ý thưc về việc quản lý các môi trường khác nhau như Development, QA, Beta, Production. Đối với các môi trường khác nhau này, sẽ khác nhau về server URL, icon ứng dụng và cấu hình. Vì vậy, trước khi tạo một bản built mới cho một môi trường, chúng ta cần đặc biệt lưu ý rằng chúng ta phải thay đổi server URL. Chúng ta có thể làm điều này bằng cách thay đổi một số giá trị cờ trong Constant file hoặc bằng Macro nhưng nó làm cho mọi thứ phức tạp hơn.

Nhưng nếu chúng ta suy nghĩ một chút, thì chúng ta có thể đưa ra một ý tưởng và bằng cách áp dụng chúng ta có thể dễ dàng xử lý huống này. Ý tưởng là, nếu chúng ta tạo ra các scheme và cấu hình khác nhau, thì nó cho phép chúng ta thay đổi các server URL , App Icon, tập tin Plist, cấu hình.

Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách quản lý các môi trường khác nhau bằng cách sử dụng scheme và cấu hình và cho phép bạn dễ dàng chuyển đổi giữa các môi trường.
Vì vậy, các bước dưới đây

Thiết lập Project:

Mở XCode và tạo một ứng dụng mới.

Thêm Schema and Cấu hình:

Trước khi thêm một Schema, chúng ta cần phải biết rằng mọi Schema trong XCode đều có hai cấu hình khác nhau Debug and Release. Vì vậy, nếu muốn, chúng ta có thể thay đổi cụ thể cho một cấu hình built.
Bây giờ để thêm cấu hình built của chúng tôi, hãy chọn Project trong menu Project Navigator ở bên trái, sau đó chọn Info từ hai tùy chọn Info and Build Settings. Trong Configurations, chúng ta phải thêm cấu hình riêng cho 5 môi trường (Phát triển, Sản xuất, QA, Beta, UAT).

Trước tiên, kích đúp vào Debug và đổi tên nó là Debug (Development). Tương tự, kích đúp vào Release và đổi tên nó là Release (Development). Bây giờ hãy nhấp vào +, và chọn Duplicate Debug (Development)Duplicate Release (Development), sau đó thay đổi tên môi trường trùng lặp với những tên có sẵn khác.

Để tạo Schema, hãy vào phần Schema Manage từ góc trên cùng bên trái của XCode, ở đó bạn có thể thấy một Schema đã có sẵn, hãy đổi tên nó là Development hoặc bạn có thể xóa nó và tạo một cái mới với tên là Development. Sau đó, thêm các Schema cho các môi trường khác.

Và đừng quên kiểm tra hộp Shared. Sau khi thêm tất cả các Schema, màn hình quản lý Schema sẽ giống như dưới đây-

Thêm các file Configuration Settings:

Nhấp chuột phải vào Project, chọn New File, sau đó thêm file Configuration Settings File và đặt tên cho nó giống với môi trường.

Sau khi thêm tất cả các file cấu hình, phần Project Navigator của bạn sẽ trông giống như dưới đây –

Bây giờ là phần quan trọng nhất, thêm server URL của bạn và các giá trị khóa tùy chỉnh khác trong file cấu hình tương ứng.

Thêm các file Plist

Đổi tên file info.plist làm developer.plist. Sao chép và dán các file plist tương tự cho các môi trường khác nhau bên trong dự án và đổi tên từng file plist với tên môi trường tương ứng. Bạn có thể thiết lập một số khóa và giá trị đặc trưng cho môi trường trong các file plist. Sau đó, thêm các khoá từ file cấu hình đến các file plist như dưới đây-

Bây giờ chúng ta phải thiết lập đường dẫn file plist tương ứng cho từng cấu hình built. Từ Targets, chỉ cần chọn file plist, đổi tên nó bằng giống tên cho cấu hình DebugRelease.

Liên kết cấu hình Built với file cấu hình tương ứng

Chọn tất cả cấu hình Built (DebugRelease) trong Projects Info từng cái một và thiết lập file cấu hình tương ứng mà bạn đã thêm vào dự án.

Chúng ta đã liên kết thành công tất cả các file cấu hình với cấu hình Built tương ứng.

Liên kết Schema and Cấu hình Build

Bước cuối cùng là liên kết Schema với cấu hình Built. Để thực hiện việc này, chọn bất kỳ Schema nào, vào phần chỉnh sửa Schema và thiết lập cấu hình built phù hợp ở đó.

Chạy Project

Bây giờ tất cả các thiết lập đã được thực hiện. Điều duy nhất bạn phải làm là chọn Schema và chạy, môi trường sẽ tự động được chọn cho bạn. Vì vậy, để lấy server URL và các giá trị khác, tôi đã tạo file Environment.swift, như dưới đây

import Foundation

public enum PlistKey {
    case ServerURL
    case TimeoutInterval
    case ConnectionProtocol
    
    func value() -> String {
        switch self {
        case .ServerURL:
            return "server_url"
        case .TimeoutInterval:
            return "timeout_interval"
        case .ConnectionProtocol:
            return "protocol"
        }
    }
}
public struct Environment {
    
    fileprivate var infoDict: [String: Any]  {
        get {
            if let dict = Bundle.main.infoDictionary {
                return dict
            }else {
                fatalError("Plist file not found")
            }
        }
    }
    public func configuration(_ key: PlistKey) -> String {
        switch key {
        case .ServerURL:
            return infoDict[PlistKey.ServerURL.value()] as! String
        case .TimeoutInterval:
            return infoDict[PlistKey.TimeoutInterval.value()] as! String
        case .ConnectionProtocol:
            return infoDict[PlistKey.ConnectionProtocol.value()] as! String
        }
    }
}

Vì vậy, để lấy url của server hoặc các thiết lập khác trong ViewController.Swift hoặc tập tin khác, bạn phải viết chỉ một dòng mã như dưới đây-

 let server_url = Environment().configuration(PlistKey.ServerURL)
     print(server_url)

Bạn cũng có thể quản lý các App Icon khác nhau cho các môi trường khác nhau từ cấu hình Built. Nó sẽ giúp bạn tìm ra môi trường built được cài đặt trên thiết bị của bạn một cách nhanh chóng.
Dự án hoàn chỉnh có tại GitHub, bạn có thể tải về nếu có bất kỳ vấn đề nào chưa còn chưa hiểu rõ.