【iOS】テスト環境と本番環境

#iOS開発での「テスト環境版」と「本番環境版」を作る

##PROJECTとTARGETS
プロジェクトを作成するとPROJECTとTARGETSというプロジェクトに関わる設定ファイルが作られている。
大まかな内容として、
「PROJECT」プロジェクトの全体設定
「TARGETS」成果物に対する個別設定
＊Targetとはビルドした結果得られる成果物のこと
＊PROJECTもTARGETSも「project.pbxproj」ファイルを参照している

![image.png](https://qiita-image-store.s3.amazonaws.com/0/59015/2468aa32-a2b5-e030-fb2a-dd2dafafaf4e.png)


##環境を分けるためにTargetは増やさないべき
Targetを増やすことによって各ターゲットの設定が完全に同じにできていなく、それぞれエラーが出たり出なかったりする可能性があるため、環境の管理をTargetにするべきではない。

#####Targetを増やすべきケース
「有料版」「無料版」などで成果物を分ける場合

#####Targetを増やさないべきケース
「開発環境版」「結合環境版」「本番環境版」などリクエスト先が異なる場合


##「開発環境版」「本番環境版」などを管理するには
**Build Scheme**と**Configuration**で管理する

####手順1. Configurationを追加する
#####(1-1) PROJECT => Info => Configurations(下図)
#####(1-2) 「＋」をタップ
#####(1-3) Duplicateする(ここではDebugをDuplicateし「Staging」と設定)
 
![image.png](https://qiita-image-store.s3.amazonaws.com/0/59015/3fd34123-d538-946b-ce4b-1736d89c1660.png)

####手順2. Schemeを追加する
#####(2-1) Schemeをタップ(下図)

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35393031352f62306537343139612d363963642d383136322d653933352d6532616131313463316335632e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/59015/f50c9446-9816-9ff4-d0f5-862bb2870761.png)
#####(2-2)New Scheme...を選択(下図)

![newScheme.png](https://qiita-image-store.s3.amazonaws.com/0/59015/f37f6f51-0246-61c3-81d1-7a251b6b7d20.png)
#####(2-3)Scheme名を決める

![image.png](https://qiita-image-store.s3.amazonaws.com/0/59015/0358e91c-b44f-d9f8-6921-0dfc6928ff21.png)
####手順3. Schemeの設定を変更する
#####(3-1)Schemeをタップし、Edit Scheme...をタップ

![editScheme.png](https://qiita-image-store.s3.amazonaws.com/0/59015/42cf2011-95b4-3d8b-0e39-a1f9a0d987f1.png)
#####(3-2)Run項目のBuild Configurationを手順1で追加したConfigurationに変更する

![editSchemeRun.png](https://qiita-image-store.s3.amazonaws.com/0/59015/854aefae-107d-d172-b9dd-149b45fbcbdf.png)
####手順4. Active Compilation Conditionsに追加する(ここでは「Staging」)

![activeCompilationCondition.png](https://qiita-image-store.s3.amazonaws.com/0/59015/11d67edb-064c-2d0f-837d-8b4419c51cf3.png)

####手順5. Preprocessor Macrosに追加する(ここでは「STAGING=1」)

![preprocesorMacros.png](https://qiita-image-store.s3.amazonaws.com/0/59015/84bda8bb-3621-4de7-787c-a2bf507bbf19.png)

####手順6. サンプルコード

```swift
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var webView: UIWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        #if DEBUG
            guard let url = URL(string: "https://www.yahoo.co.jp/") else { return }
            webView.loadRequest(URLRequest(url: url))
        #elseif STAGING
            guard let url = URL(string: "https://www.apple.com/jp/") else { return }
            webView.loadRequest(URLRequest(url: url))
        #endif

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}
```

##実行
#####元からあるSchemeでビルドした場合

![image.png](https://qiita-image-store.s3.amazonaws.com/0/59015/2117fc96-db88-e07c-d476-4f8b12db6b59.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/59015/71a53644-5b85-df0c-e778-4d17e44a2517.png)

#####追加したSchemeでビルドした場合

![image.png](https://qiita-image-store.s3.amazonaws.com/0/59015/05c59d1d-a67c-ae49-0f47-f3e4bfbecdcc.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/59015/2ddcb59e-7a18-760c-59d8-4f90aec3abb7.png)