Target
/Scheme
によるConfig管理
目指すところ
- ソースコード各所での実装が簡潔である
-
Scheme
つまりはビルド環境が開発者間、CIなどと連携できる
手順
前提としてAPIサーバは 開発(Development)
/ステージング(Staging)
/本番(Production)
があるものとする
- 各環境ごとに
Target
を作る - 各
Target
ごとにScheme
をつくる - Config のインタフェースを定義する
- 各環境ごとに Config を実装する
1. 各環境ごとにTarget
を作る
余談
2. 各Target
ごとにScheme
をつくる
[Manage Schemes...]
から各Target
ごとにScheme
を作る。
[Executable]
を各Target
に設定。
3環境分完了。
3. Config のインタフェースを定義する
インタフェース = Protocol
を定義する。
protocol APIConfigProtocol {
var baseURL: URL { get }
}
struct APIConfig: APIConfigProtocol {
// インスタンス化させない
private init() {}
}
ここではプロトコルの採用のみを行い、var baseURL: URL
の実装は行わない。
このままの状態だとビルドエラーになるが、それが正しい。
4. 各環境ごとに Config を実装する
次にDevelopment
環境のConfig実装を行う。
extension APIConfig {
var baseURL: URL {
return URL(string: "https://dev.foo.com")!
}
}
これをあと2環境分行う。
結果
SampleApp Development
では https://dev.foo.com
が返り、
SampleApp
では https://foo.com
が返る。