xcode-install を利用した Xcode のバージョン管理をやってみた

Xcode のバージョン管理するが面倒くさい！そう思ったことはありませんか？

App Store から DL しても途中で失敗したりなかなかうまいこといきません。
仕方がないので Developer Center から直接 DL してきます。
そして古い Xcode.app をリネームして残しておき、新しいのと入れ替える。

そう、めんどくさいんです。。。

そんな時に [neonichu/xcode-install](https://github.com/neonichu/xcode-install) と出会いました。
作者は try! Swift でも登壇されていた [Boris Bügling](https://twitter.com/NeoNacho) さんです。

これは rbenv のような **env 系と似たような interface を持つ CLI で Xcode のバージョンを管理するのに特化しています。

これがとても便利だったので紹介します。

## xcode-install の使い方

### Installation

```
gem install xcode-install
```

Xcode を DL する際に Developer Center にログインする必要があります。

毎回ログイン情報を入力するのもめんどくさいので、`XCODE_INSTALL_USER`, `XCODE_INSTALL_PASSWORD`の環境変数を指定しておくと楽になります。

password はいやだって人は ID だけでも設定しておくと、一度パスワードを入力すると次回からは keychain から取得してくれるのでそれでもいいかなと思います。

ここの部分は [fastlane/credentials_manager](https://github.com/fastlane/credentials_manager) を使っているようです

### Usage

```
$ xcversion update
$ xcversion install 7.3.1
```

仕組みとしては簡単で Xcode_x.x.x.dmg を cache ディレクトリに保存し、それを /Application/Xcode-x.x.x.app にインストール後、`xcode-select` を実行してバージョンを切り替えてくれます

以下、ざっと使うコマンドを紹介していきます

### インストール可能なバージョン一覧を表示

```
$ xcversion list
7
7.0.1
7.1
7.1.1
7.2
7.2.1 (installed)
7.3 (installed)
7.3.1 (installed)
```

`--all` をつけると、さらに古いバージョンも表示されます

### インストール可能なバージョン一覧を更新
```
$ xcversion update
```

### インストール済みのバージョン一覧を表示
```
$ xcversion installed
6.4     (/Applications/Xcode-6.4.app)
7.2.1   (/Applications/Xcode-7.2.1.app)
7.3     (/Applications/Xcode-7.3.app) 
7.3.1   (/Applications/Xcode-7.3.1.app)
```

`DVTPlugInCompatibilityUUID` を一覧で表示するオプションを追加した [PR](https://github.com/neonichu/xcode-install/pull/130) がマージされたので 1.3.0 の次のバージョンから使えるようになるでしょう。
Xcode Plugin を作ってる(使ってる)人には大助かりですね。

はやく使いたい方は master からインストールしてもらえれば使えます
```
$ xcversion installed --uuid
6.4     (/Applications/Xcode-6.4.app)     7FDF5C7A-131F-4ABB-9EDC-8C5F8F0B8A90
7.2.1   (/Applications/Xcode-7.2.1.app)   F41BD31E-2683-44B8-AE7F-5F09E919790E
7.3     (/Applications/Xcode-7.3.app)     ACA8656B-FEA8-4B6D-8E4A-93F4C95C362C
7.3.1   (/Applications/Xcode-7.3.1.app)   ACA8656B-FEA8-4B6D-8E4A-93F4C95C362C
```

### 利用する Xcode を変更
```
$ xcversion select 7.3.1
```

### Simulator の install 状況を確認
```
$ xcversion simulators
Xcode 7.3.1 (/Applications/Xcode-7.3.1.app)
iOS 8.1 Simulator (installed)
iOS 8.2 Simulator (installed)
iOS 8.3 Simulator (installed)
iOS 8.4 Simulator (installed)
iOS 9.0 Simulator (installed)
iOS 9.1 Simulator (not installed)
iOS 9.2 Simulator (installed)
tvOS 9.0 Simulator (installed)
tvOS 9.1 Simulator (installed)
watchOS 2.0 Simulator (installed)
watchOS 2.1 Simulator (installed)
```

### Simulator を install

```
$ xcversion simulators --install='iOS 9.1 Simulator'
```

### Xcode_x.x.x.dmg を削除
一度 DL した Xcode_x.x.x.dmg は保存されたままになります。
ディスク容量が気になる方は `cleanup` を実行して削除してください
```
$ xcversion cleanup
```

### はまりどこ
Developer Center にログインすると利用規約への同意画面が表示されるような状態のアカウントを使うと Xcode の DL に失敗(タイムアウト)します。
普段使っていないアカウントを使う場合は一度ログインして確認しておきましょう。

## まとめ
`xcode-install` を使うことによって Xcode のアップデートが以下のような手順になります。
```
$ xcversion update             // 一覧更新
$ xcversion list               // 入れたいバージョンを確認
$ xcversion install x.x.x      // インストール
```
これだけで最新の Xcode が使えるようになり、バージョン管理も行ってくれます。
これで Xcode のヘッダーの diff をとってニヤニヤする作業もしやすくなりますね。