iOSアプリ開発:Xcodeでバージョン管理

※個人で管理しているHPに引っ越ししました。
リンク切れ等考慮して本ページは残しておきますが、今後は[HP](https://kittenkitten.net/2017/01/02/ios_dev_xcode_version/)のほうで更新します。

バージョン管理ってなに？美味しいの？とか色々疑問に思う部分があるかもしれませんが、ひとまず試してみましょう。

というのもあれなので、一応自分なりのバージョン管理について説明しておきます。
・日々のプロジェクト一式のバックアップ
　プロジェクトフォルダ一式をコピペし、日付情報入れなくても、バージョン管理で1箇所で管理出来る。
　複数管理も可能。
・ソースのコメントに記載しなくても、バージョン情報を見ればなんのためにどういった対応したのか分かる。
　ものによってはソースに書くのも問題無い。
　ただ、複数ソースにまたがった変更とかはバージョン管理でまとめて管理するとあとで把握しやすい。
・リリース(バージョンアップ等)情報を思い出さなくても、バージョン情報を見直せばOK。
　バージョン1.0.0リリース。
　AA修正。
　BBをCCに変更。
　バージョン1.0.1リリース。
　　とあったら、バージョン1.0.1リリース情報はAA修正、BBをCCに変更と書けばOK。

あの頃何してたっけ？というのを追うのも便利です。
ここからは、Xcodeでのバージョン管理について説明を書いていきます。
Xcodeでは、Gitを使ってバージョン管理します。

# Xcodeプロジェクト上でバージョン管理してみる
## Xcodeプロジェクト用意
Xcode->File->New->Project
　iOS->Application->Game->Next
　　Product Name:sample
　　Organization Name:ai
　　Organization Identifier:com.kittenkitten
　　Bundle Identifier:com.kittenkitten.sample(※勝手に入力される)
　　Language:Objective-C
　　Game Technology:OpenGL ES
　　Devices:Universal
　　　Next
　　　　Source Control:Create Git repository on My Macにチェックを入れる
　　　　※バージョン管理でもっとも重要な設定はここです。必ずチェックを入れましょう。
　　　　※ちなみに、この設定はローカルにバージョン情報を保存します。
　　　　　Createで、プロジェクト生成。

## バージョン管理情報確認
Xcode->Source Control->History
　Show xx modified files
　　初回なので、プロジェクト生成した際のファイル一式が表示されます。
　　左ペインのファイル名の横に[A]とあるのが追加、[D]は削除、[M]は変更です。
　　Doneで、ウィンドウを閉じる。

## 自分でバージョン情報保存してみる
適当にファイルを変更してみる。
　Xcode->Source Control->Commit
　　すると、左ペインに変更したファイルが表示されます。
　　選択すると、変更点が表示されます。
　　右が変更前、左が変更後です。
　　問題無ければ、下の欄にメッセージを入力。
　　　後で、どういった変更か見返しやすいよう、変更内容を記載するといいです。
　　　　Commit xx fileで、バージョン情報保存(ローカル)。

## バージョン情報の内容確認
Xcode->Source Control->History
　先ほど書いたメッセージが表示されていると思うので、Show xx file
　すると、先ほど変更した内容が確認出来ます。
　Done、Doneで、ウィンドウを閉じる。

基本は、これで終わりです。
過去に記載した記事は下記のようなものがあります。
* [リポジトリにファイル追加](http://qiita.com/pgcmg00/items/ca1fe7bfbd93404d2c3e)
* [リポジトリにコミット出来ない](http://qiita.com/pgcmg00/items/0b94986290e8ae3a3b7e)

Gitについて色々知りたい！というのであれば、次の項目も見ていただければと思います。

---
# バージョン情報で保存したものを元に戻してみる
ただし、Xcode(7.3.1)時点では、GUI上から操作する方法は分かりません。
そのため、ターミナル(アプリケーション/ユーティリティにあります)も使った説明を記載しています。
## 更に自分でバージョン情報保存してみる
さらに変更をしてみて、
上記の[自分でバージョン情報保存してみる]
をする。

## 変更を戻してみる

### ターミナルで作成したxcodeプロジェクトのフォルダまで移動
### 合っているか、バージョン情報を一応見てみる
上から新しいログとなっています。

```
$ git log
commit a92dd15981861906b6c0307a26496203ea18f827
Author: ai <ai@xxxx.local>
Date:   Mon Jan 2 17:10:13 2017 +0900

    さらに試してコメントを追加

commit ebe2d23b9d7b6e6a3f628f41be842dd7f18e2a27
Author: ai <ai@xxxx.local>
Date:   Mon Jan 2 17:07:00 2017 +0900

    コメントをつけた

commit 2dc38e807c0043a053bcd69d51b8c510c4060cd1
Author: ai <ai@xxxx.local>
Date:   Mon Jan 2 16:53:25 2017 +0900

    Initial Commit
```

### 一番新しいバージョン情報を戻してみる
ターミナルで、再度下記を実行。
※a92dd15981861906b6c0307a26496203ea18f827は、先ほどのgit lotで出した該当するcommitです。

変更内容が出たら、:と表示されるのでq!enterを押しましょう。
すると、下記のように表示され戻します。

```
$ git rivert a92dd15981861906b6c0307a26496203ea18f827
[master 95defca] Revert "さらに試してコメントを追加"
 Committer: ai <ai@xxxx.local>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly. Run the
following command and follow the instructions in your editor to edit
your configuration file:

    git config --global --edit

After doing this, you may fix the identity used for this commit with:

    git commit --amend --reset-author

 1 file changed, 1 deletion(-)
```

### 変更が戻っているのを確認
Xcode->Source Control->History
　だと、
　Revert "xxxx"
　This reserts commit a92dd15981861906b6c0307a26496203ea18f827.
　といった風にログがあるかと思います。
　Show xx modified fileを見ると、元に戻した内容も見れます。

ログすら残さず元に戻す方法もありますが、複数人で開発した際に問題が出ないように基本はログを残して元に戻すのを個人的にはオススメします。

ターミナルでGitコマンドを実行出来るようになったかと思うので、あとはGitをネットで調べてぽちぽちやっていけばXcode上でサポートされていなくても色々出来るかと思います。