Xcodeプロダクト名の変更

Xcodeで新規プロジェクトを作るときに設定したプロダクト名を後から変更しようとした際の手順を備忘録としてまとめておきます。
Xcodeのバージョンは8.2です。
# 準備

- Xcodeで新規プロジェクトを作成します。テンプレートは`Single View Application`を使用し、
`Product Name`はSampleとします。

![before_top.png](https://drive.google.com/uc?export=view&id=0B-F4UIL5uMsubTljUlJoME0yRjQ)

treeコマンドで見たディレクトリ構成です。
![before.png](https://drive.google.com/uc?export=view&id=0B-F4UIL5uMsuZlhZcW1mQ1R0SDg)

# 変更

- `PROJECT`のSampleを選択する。

![step1.png](https://drive.google.com/uc?export=view&id=0B-F4UIL5uMsuZkFVUFJCZWVPbm8)


- `Identity and Type`のNameを変更します。今回はNewSampleとします。

![step2.png](https://drive.google.com/uc?export=view&id=0B-F4UIL5uMsuX1lwOFJqSHhiWnM)

- プロンプトが立ち上がるので`Rename`を選択します。

![step3.png](https://drive.google.com/uc?export=view&id=0B-F4UIL5uMsuNG9CNmxNSl9vQ00)

- ナビゲーションバーから`Product`->`Scheme`->`Edit Scheme...`を選択するとプロンプトが立ち上がるので`Manage Schemes...`を選択します。

![step4.png](https://drive.google.com/uc?export=view&id=0B-F4UIL5uMsuU212bHRnS1gySWc)

- `+`ボタンを選択するともう一つプロンプトが立ち上がるので`Name`の欄がNewSampleとなっていることを確認して`OK`を選択します。

![step5.png](https://drive.google.com/uc?export=view&id=0B-F4UIL5uMsuVVZSS2RBdlpLRUE)

- Sampleをチェックし、`-`ボタンを選択するとプロンプトが立ち上がるので`Delete`を選択します。


![step6.png](https://drive.google.com/uc?export=view&id=0B-F4UIL5uMsudjgybnlseDlpUms)

- NewSampleをチェックし、`Close`ボタンを選択してプロンプトを閉じます。

![step7.png](https://drive.google.com/uc?export=view&id=0B-F4UIL5uMsuZmROOHBzSUhWREk)

- ナビゲーターエリアのディレクトリ名も変更します。Sampleを選択し、`Identity and Type`のNameをNewSampleに変更します。同様にSampleTestsを選択し、`Identity and Type`のNameをNewSampleTestsに変更します。

![step8.png](https://drive.google.com/uc?export=view&id=0B-F4UIL5uMsuRlZ4QlZqbzJVYUE)

- SampleTests.swiftをNewSampleTests.swiftにリネームして以下のように書き換えます。

``` swift
import XCTest
@testable import NewSample

class NewSampleTests: XCTestCase {
    
    override func setUp() {
        super.setUp()
        // Put setup code here. This method is called before the invocation of each test method in the class.
    }
    
    override func tearDown() {
        // Put teardown code here. This method is called after the invocation of each test method in the class.
        super.tearDown()
    }
    
    func testExample() {
        // This is an example of a functional test case.
        // Use XCTAssert and related functions to verify your tests produce the correct results.
    }
    
    func testPerformanceExample() {
        // This is an example of a performance test case.
        self.measure {
            // Put the code you want to measure the time of here.
        }
    }
    
}

```

- これでXcodeでのディレクトリ構成は変更されたのですが、treeで見ると実際のディレクトリ構成とは異なっています。

![step9-1.png](https://drive.google.com/uc?export=view&id=0B-F4UIL5uMsuaTBZeHN2aWU5ZlU)

![step9-2.png](https://drive.google.com/uc?export=view&id=0B-F4UIL5uMsuZDE1ZmxkZUNoUXM)

これを合わせるために[Synx](https://github.com/venmo/synx)を使用します。
* Synxについては「[Xcodeのファイルを整理する Synx](http://qiita.com/Yuta/items/fdce62fcb871912629ce)」を参考にさせていただきました。
次のコマンドを実行します。

```sh
$ synx NewSample.xcodeproj/
```

- この段階でtreeで見たときのディレクトリ構成です。

![step10.png](https://drive.google.com/uc?export=view&id=0B-F4UIL5uMsuazFQUnlCZHE4d2M)

プロジェクトトップの名前をNewSampleに変更して、空のディレクトリSampleとSampleTestsを削除すると新規作成で`Product Name`をNewSampleで設定したものと同じ構成のものができます。

![after.png](https://drive.google.com/uc?export=view&id=0B-F4UIL5uMsuVzdpR3lINElGMnM)

[参考]
[【備忘録】 Xcodeプロジェクト名の変更](http://kevin99.cocolog-nifty.com/mydiet/2016/02/xcode-ea01.html)