gitって便利ですよね。
iPhoneアプリを共同開発する時も当然使いたいんですが
Xcodeのプロジェクトを管理しようと思うと若干不便なんです。
Xcodeはproject.pbxproj
という一つのファイルでプロジェクト全体を管理しているので
共同で開発しているとこれがあっという間にコンフリクトを起こします。(ここから先は†闇†)
今日は共同開発するときにうまくいくXcode+gitワークフローについて考えてみたいと思います。
.gitignore
まず何をgitで管理すべきで何を管理すべきでないかですが.xcodeproj以外は普通に管理すべきでしょう
.xcodeprojの中にはXcode上でどのフォルダが開いているかなどの管理しなくていい情報も含まれているのでこれを選別するよう.gitignoreを書きます
僕がよく使っている.gitignoreは以下のものです
1 2 3 4 5 |
*.xcodeproj/* !*.xcodeproj/project.pbxproj !*.xcworkspace/contents.xcworkspacedata .DS_Store |
(出典: Xcodeプロジェクト用の.gitignoreを作成する)
最小構成で非常にいい感じですね。
以前の記事で紹介したものもありますが、これはより幅広いケースに対応しているので.gitignoreが少し長くなってもよければこっちもオススメです!(これは気分の問題かな?)
Xcode+gitのワークフロー
基本的にはproject.pbxproj
の変更を共有できるようにすればいいので方針としてはproject.pbxproj
が変更されるたびにmaster(or dev)に反映させるのがいいと思います。
project.pbxproj
が変わるのは
- プロジェクトの設定を変えた時
- プロジェクトにファイルを追加した時
の2つの場合です。
※プロジェクトの設定を変えても場合によってはInfo.plistだけが変わる時もあります
よってブランチは
- プロジェクトの設定を変えるとき(modify_config)
- プロジェクトに新しいクラスを追加するとき(add_new_classes)
- プロジェクトに新しいリソース(画像や音楽など)を追加するとき(add_new_resources)
に毎回切るのがいいでしょう。
設定の変更が終わったら即マージ。
クラスの追加が終わったら即マージ。
リソースの追加が終わったら即マージ。
です☆(ゝω・)
それ以外の作業は普通に機能毎にブランチを切って進めればいいでしょう。
めんどくさくない?
正直project.pbxproj
の存在がgitを使う自由度をかなり奪っていると思います。
せっかくなんだからXCodeが自動的にコンフリクト解消してくれたらいいのに(´・ω・`)
でも理想論をいうと
- 最初にプロジェクトの設定をしっかり終わらせて
- 最初にクラス設計をしっかりしてそれ以上クラスが増えないようにして
- 最初に画像や音楽などのリソースを全部用意する
ことができればproject.pbxproj
の顔色をうかがう必要はないわけです(あくまで理想論ですが)
それでもある程度心がけることで開発中のgitによるトラブルは減らすことができるでしょう。
ひろせ