project.pbxprojのgitでの扱いについてとconflictの解消

参考サイト

ググったらCOMPHORのサイトだった!COMPHORすぎょい。

Xcode+gitのワークフロー考察 - CAMPHOR- Tech Blog

pbxprojとは

Xcodeのプロジェクトをgitで管理することの障壁を作っていると思われるproject.pbxproj。こいつは、

  • プロジェクトの設定を変えた時
  • プロジェクトにファイルを追加した時

に変更されます。

なので

  • クラスを追加した
  • 画像、音声などを追加した
  • バージョン情報などのプロジェクトの設定を変更した

ときとかに変わります。そしてこれらのいずれかが変更されたブランチ同士のmergeだと、ほぼ毎回conflictします。自分で解消するハードルが高いのがかなり辛いです。

どうする?

さきほどのCOMPHORさんの記事では、

基本的にはproject.pbxprojの変更を共有できるようにすればいいので方針としてはproject.pbxprojが変更されるたびにmaster(or dev)に反映させるのがいいと思います。 Xcode+gitのワークフロー考察 - CAMPHOR- Tech Blog

とされています。 

たしかに...。中々.gitignoreするのもいろいろ問題が発生しそうなので、開発方針として決めておくしかないのかなと思います。 基本的にTopic Branchではproject.pbxprojを変更しないようにする、project.pbxprojをmasterかdevなどのメインのブランチで変更した場合はすぐに各ブランチでpullする。など...。

Xcodeのgitツール、かなり作りこまれていてすごいのでもう少しがんばってほしい。

conflictしてしまったら...

conflictしてしまった場合は、以下のmergepbxを使うのが良いと思います。

simonwagner/mergepbx · GitHub

READMEに詳しく導入方法なども書いてあるので参考になります。

社内プロジェクトからOSSにするパターン、いいなー。