LoginSignup
0
2

More than 5 years have passed since last update.

【iOS】アプリ開発におけるAPI環境切り分けとConfig管理

Posted at

Target/Scheme によるConfig管理

目指すところ

  • ソースコード各所での実装が簡潔である
  • Schemeつまりはビルド環境が開発者間、CIなどと連携できる

手順

前提としてAPIサーバは 開発(Development)/ステージング(Staging)/本番(Production) があるものとする

  1. 各環境ごとにTargetを作る
  2. TargetごとにSchemeをつくる
  3. Config のインタフェースを定義する
  4. 各環境ごとに Config を実装する

1. 各環境ごとにTargetを作る

スクリーンショット 2019-04-19 17.55.50.png
スクリーンショット 2019-04-19 17.58.04.png

余談

スクリーンショット 2019-04-19 17.59.00.png

2. 各TargetごとにSchemeをつくる

[Manage Schemes...] から各TargetごとにSchemeを作る。

スクリーンショット 2019-04-19 18.00.05.png

スクリーンショット 2019-04-19 18.00.15.png
スクリーンショット 2019-04-19 18.00.33.png

[Executable]を各Targetに設定。

スクリーンショット 2019-04-19 18.00.57.png
スクリーンショット 2019-04-19 18.01.16.png
スクリーンショット 2019-04-19 18.01.33.png
スクリーンショット 2019-04-19 18.02.21.png

3環境分完了。

スクリーンショット 2019-04-19 18.02.41.png

3. Config のインタフェースを定義する

インタフェース = Protocol を定義する。

スクリーンショット 2019-04-19 18.05.21.png

protocol APIConfigProtocol {
    var baseURL: URL { get }
}

struct APIConfig: APIConfigProtocol {
    // インスタンス化させない
    private init() {}
}

ここではプロトコルの採用のみを行い、var baseURL: URLの実装は行わない。
このままの状態だとビルドエラーになるが、それが正しい。

4. 各環境ごとに Config を実装する

次にDevelopment環境のConfig実装を行う。

スクリーンショット 2019-04-19 18.07.07.png

extension APIConfig {
    var baseURL: URL {
        return URL(string: "https://dev.foo.com")!
    }
}

これをあと2環境分行う。

スクリーンショット 2019-04-19 18.11.55.png
スクリーンショット 2019-04-19 18.12.44.png

結果

SampleApp Development では https://dev.foo.com が返り、

スクリーンショット 2019-04-19 18.15.02.png

SampleApp では https://foo.com が返る。

スクリーンショット 2019-04-19 18.15.20.png
スクリーンショット 2019-04-19 18.15.36.png

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2