Xcode6（Swift）で1つのプロジェクトから開発版とリリース版の2つのアプリを作りたい

Xcode6の1つのプロジェクトから、開発版とリリース版の2つのアプリを作りたい、と思います。

# 開発版とリリース版で変えたいポイント

## 開発上必要

* APIのURL

## 開発の時にフィードバックをもらいやすくする

* アプリのアイコン
* アプリの名前
* アプリで常に開発版なのか？を表示する

# Xcode プロジェクトのターゲット管理

開発版とリリース版でプロジェクトを分ける

![2.png](https://qiita-image-store.s3.amazonaws.com/0/21321/279e26e4-4d46-6aaf-8438-14c3adb2e5b2.png)

# APIのURL

サーバーサイドが必要なアプリだとURLを開発用途で別に作っているハズ。
定数として色々と環境によって変更したい、というのもあります。

## 定数のclass

定数を設定するclassを用意します。
定数を設定するいい方法があるかもしれないんですが、今回はとりあえず。

```swift:Constants.swift
import Foundation

class Constants:NSObject {
    #if DEBUG
    let MESSEAGE = "こんにちは（開発中です）"
    #else
    let MESSEAGE = "こんにちは"
    #endif
}
```

## ViewController

設定した定数を呼び出します。

```swift:ViewController
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var LabelMessage: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        LabelMessage.text = Constants().MESSEAGE
       
        println(Constants().MESSEAGE)
    }

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

## if debug の設定

「#if DEBUG」と書いて分岐したので、DEBUGであることを指定します。
複製したターゲット毎に設定します

```
TARGETS > Build Settings > Swift Compiler - Custom Flags > Other Swift Flags
```
```
-D DEBUG
```

![1.png](https://qiita-image-store.s3.amazonaws.com/0/21321/fa78a6cd-858e-b9aa-3a79-e56799f347c3.png)


# アプリのアイコン

App Icons Source を指定します。

![スクリーンショット 2015-02-17 23.51.59.png](https://qiita-image-store.s3.amazonaws.com/0/21321/2c761542-9252-0022-5fb4-63ea9a7b1f6c.png)

# アプリの名前

ターゲット毎のInfo.plistにある「Bundle display name」が表示されるアプリの名前になります。

![スクリーンショット 2015-02-18 0.07.04.png](https://qiita-image-store.s3.amazonaws.com/0/21321/ce98c698-ef83-568b-364d-b8e71e286272.png)


# アプリで常に開発版なのか？を表示する

画面の下部に「開発版」であることを表示するようにしてみます。
アプリによっては、書き換えが必要になると思います。そこは、よしなに。

```swift:AppDelegate.swift
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        let splitViewController = self.window!.rootViewController as ViewController
       
        let size = CGSize(width: splitViewController.view.frame.size.width, height: 50)
        let postion:CGPoint  = CGPoint(x: 0, y: splitViewController.view.frame.size.height-50.0)
        let view:UIView      = UIView(frame: CGRect(origin: postion, size: size))
       

#if DEBUG
view.backgroundColor = UIColor(red: 255, green: 0.0, blue: 0.0, alpha: 0.5)
#else
view.backgroundColor = UIColor(red: 138, green: 138, blue:0, alpha: 1)
#endif
       

        let devInfoLabel   = UILabel()
        devInfoLabel.text  = "開発版：" + Constants().MESSEAGE

        devInfoLabel.font      = UIFont.systemFontOfSize(14)
        devInfoLabel.frame    = CGRect(origin: CGPoint(x: 10, y: splitViewController.view.frame.size.height-50.0), size: size)

        splitViewController.view.addSubview(view)
        splitViewController.view.addSubview(devInfoLabel)
       

        return true
    }

```

![スクリーンショット-2015-02-18-0.00.23.png](https://qiita-image-store.s3.amazonaws.com/0/21321/964a3257-2f80-9b42-0d94-5f251cd52adb.png)