Xcode9.2でXVim2を動くようにする

巷に転がっている方法ではなぜか動かなったが、苦戦しつつも解決できたので誰かの助けになればと思い書く。
結論から言うと

  1. XVim2のブランチがXcode9.2対応ブランチでなかった
  2. Xcode/Plug-ins/XVim2/XVim2/Info.plistの15〜19行目にUUIDが記述されているが、ここに筆者が使っているXcodeのUUIDがないこと

が原因だった。

手順

ざっくりすると以下の手順。

  1. Xcode9.2対応ブランチに切り替える
  2. Xcode9.2のUUIDを追加しているコミットを取り込む
  3. make、update_xcode_pluginsをしてインストール

コマンドまとめ

コミット番号とか変わるはずがないので以下のコマンドを打っていけば動作するはず。 急いでいる方はこちらをどうぞ。

# Xcodeのプラグイン置き場に移動
cd ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins
# XVim2を落としてくる
git clone git://github.com/XVimProject/XVim2 XVim2
# ここからはXVim2ディレクトリの中で作業を行う
cd XVim2
# Xcode9.2対応ブランチを作成
git checkout -b xcode9.2 refs/tags/xcode9.2
# XCode9.2のUDIDを追加しているプルリクエストをローカルに持ってくる
git fetch origin pull/96/head:unchartedworks
# UDIDを追加したコミットを取り込む
git cherry-pick e85d3ed83018022d571474ce3bdaad3278a940f7
# XVim2をXcodeにインストール
make
update_xcode_plugins
defaults delete com.apple.dt.Xcode DVTPlugInManagerNonApplePlugIns-Xcode-9.2

以上で無事XVim2が動くはず。

詰まった箇所1:masterブランチはXcode9.2に対応していない

git logを見ていたら以下のコミットを発見

commit cca1fff54ed29798b54eb80a906260e88be4e366
Author: pebble8888 <pebble8888@gmail.com>
Date:   Sun Apr 1 15:01:47 2018 +0900

    support Xcode9.3 (not support Xcode9.2 and lower)

おやおやまさかな、、、と思い初心に帰ってREADMEを見る。

tags xcode9.2 xcode9.4 Please use appropriate tags or branches.

最初からREADME見ろよと言いたい。「適切なブランチを使ってね」と書いてある。

Xcode9.2対応ブランチに切り替える方法

git logをして「tag」で検索すると以下のような箇所が見つかるためコミット番号をコピーしてcheckoutする。 f:id:rasukarusan:20180908181637p:plain

Xcode9.2対応ブランチに切り替える

git checkout 66c6dc44edfca8a032b78294a03721ee7c51dd95 -b xcode9.2

もしくはシンプルにこっち。

git checkout -b xcode9.2 refs/tags/xcode9.2

Xcode9.2のUUIDを追加しているコミットを取り込む

ブランチを切り替えただけではXVim2は動かなかった。あとで気づいたがどうやら筆者のXcodeのUUIDがXVim2/Info.plistに記述されていないことが原因だった。
以下の記事を参考に該当のコミットを取り込む。

qiita.com

プルリクをローカルに引っ張ってくる

git chery-pickするために該当コミットをしているブランチをローカルに落とす必要がある。

git fetch origin pull/96/head:unchartedworks

コミットを取り込む

githubプルリクからコミット番号を確認してgit cherry-pickでコミットを取り込む

f:id:rasukarusan:20180908181811p:plain

git cherry-pick e85d3ed83018022d571474ce3bdaad3278a940f7

詰まった箇所2:update_xcode_plugins --unsignの罠にはまる

あとはmakeしてupdate_xcode_plugins --unsignを終了!と思いきや壁にぶつかる。 どこのページを見てもupdate_xcode_plugins --unsignのコマンドを実行しているが、以下のエラーが出る。

▶update_xcode_plugins --unsign
Looking for Xcode...

Didn't find any signed Xcode 8+ on your system.

念の為以下のコマンドでインストールしなおした。

sudo gem install update_xcode_plugins

しかし結果は変わらない。一度restoreした。

update_xcode_plugins --restore

ふとここでなんのためにupdate_xcode_plugins --unsignをするのか気になったので調べてみた。

medium.com

どうやらサードパーティプラグインXcodeで利用する場合、署名を変更しないと、Xcodeの起動がすごく遅くなる、とのこと。 それなら別にとりあえずXVim2を使いたいなら--unsignしなくてもいいんじゃね?と思ったので--unsignを外してみた。

▶update_xcode_plugins
Found:
- Xcode (9.2) [B395D63E-9166-4CD6-9287-6889D507AD6A]: /Applications/Xcode.app

Plugins:
- XVim2 (1.0)

Updating...

Finished! 🎉

It seems that you have Xcode 8+ installed!
Some plugins might not work on recent versions of Xcode because of library validation.
See https://github.com/alcatraz/Alcatraz/issues/475

Run `update_xcode_plugins --unsign` to fix this.

なんかうまくいっているっぽいのでこれで良しとした。

Xcode起動時にXVim2を読み込む

defaults delete com.apple.dt.Xcode DVTPlugInManagerNonApplePlugIns-Xcode-9.2

を打ち込みXcodeを起動する。すると以下のようなアラートが表示されるので「Load Bundle」をクリック。

f:id:rasukarusan:20180908214305p:plain

プロジェクトを開くと、、、

f:id:rasukarusan:20180908182048g:plain

感無量。 てかgit cherry-pickとか使わず普通にInfo.plistに書き込めばよかったんじゃね...