Xcode プロジェクトを Subversion 管理する

Xcode プロジェクトを Subversion 管理する

2007/06/18 3:35am

Apple の提供する開発環境 Xcode で作成したプロジェクトを Subversion 管理する手順。基本的に「Rails のプロジェクトを Subversion で管理する」の Xcode 版。

リポジトリの場所を決める

まずは、リポジトリのルート URL を決めて、これを環境変数に設定しよう。以降はこの変数を使うことで、長々とした URL をタイプする手間が省ける。

% SVN_REPO=svn+ssh://svn.example.com/projects/Example

もちろん、実際の URL は自分で使うものに置き換えてほしい。

空のプロジェクトをコミットする

ここで、いきなり Xcode を起動して新規プロジェクトをつくるのではなく、まずは、プロジェクトのディレクトリ・レイアウトを構成した、空のプロジェクトをコミットする。

Subversion 管理するプロジェクトのディレクトリ・レイアウトといえば、trunk branches tags が王道なので、これに合わせておくのがいいだろう。たとえ、開発者があなたひとりで、職場の数人しか使わないようなアプリケーションを開発しており、ブランチなんか作る予定がないのだとしても。

% mkdir tmp
% cd tmp
% mkdir trunk tags branches
% svn import ./ ${SVN_REPO} -m "initial import"
Adding         trunk
Adding         branches
Adding         tags

Committed revision 20.

コミットしたら、このディレクトリは必要ないので削除しても大丈夫だ。

% cd ..
% rm -rf tmp

Xcode のプロジェクトにチェックアウト

そうして、コミットした空のプロジェクトを Xocde のプロジェクト・ディレクトリにチェックアウトすれば、Subversion 管理された Xcode プロジェクトが出来上がる。この方法なら、すでに開発中のプロジェクトにも適用しやすい。

ここでは、~/Developer/Workspace/Example/ に Xcode のプロジェクトを作成しているものとする。そのディレクトリに移動し、さきほどコミットしたプロジェクトの trunk をチェックアウトしよう。

% cd ~/Developer/Workspace/Example/
% svn checkout ${SVN_REPO}/trunk .

バージョン管理するファイルの選択

ここまでで、

  1. プロジェクトのディレクトリ・レイアウトを決める
  2. 空のプロジェクトをコミットする
  3. Xcode プロジェクトにチェックアウト

が出来た。

もちろん、いまは空のディレクトリをチェックアウトしただけなので、Xcode プロジェクト内のファイルはいずれもバージョン管理されていない。

ひとつひとつ、必要なファイルを svn add してもかまわないが、最初にすべてを svn add してしまって、不要なものを取り除くのが簡単だ。

% svn add --force .
A         Example.xcodeproj
A         Example.xcodeproj/ishikawa.mode1
A         Example.xcodeproj/ishikawa.pbxuser
A         Example.xcodeproj/project.pbxproj
A         Example_Prefix.pch
A         build

ビルド結果が保存される build ディレクトリはバージョン管理しなくてもよいだろう。まずは、このディレクトリを管理対象から外す。

% svn revert build --recursive
% svn propset svn:ignore "build" .

Xcode のプロジェクトパッケージ .xcodeproj にはユーザー特有のファイルが含まれているので、複数人で開発する場合は、これらも管理対象から外しておいた方がいいだろう。

% svn revert Example.xcodeproj/ishikawa.*
% svn propedit svn:ignore Example.xcodeproj/
*.mode1
*.pbxuser

最後に変更をコミットして終わり。

% svn commit -m "New Xcode project"