Help us understand the problem. What is going on with this article?

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away