Xcode で Subversion を利用するときのトラブルシューティング

Xcode SCM Preference

Xcode の SCM 連携機能は、すくなくとも Eclipse なんかに比べると貧弱で、実作業ではコマンドラインで svn を使っている。

それでも一度は試しておきたい、と試してみたときの、あまり一般的ではないトラブルシューティングを覚え書き。

svn+ssh で 22 番以外のポートを使いたいとき

これは別に Xcode に限った話じゃないけど、svn+ssh プロトコルで 22 番以外のポートを使う場合は、環境変数 SVN_SSHssh プログラムの引数に指定します。

export SVN_SSH="ssh -p 12345"

環境変数を export したターミナルで、そのまま .xcodeproj を開けばいいです。

open ./Example.xcodeproj

それでも、パスフレーズ入力できないとき

上の方法で Xcode 起動して、SCM を有効にしても、パスフレーズの入力画面などがでず、Permission denied で怒られてしまうことがある ... というか、僕がまさにそれ。

このときは、SSHKeychain を使って、パスフレーズ入力を横取りすることで動くようになった。

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

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"

Eclipse の Java プロジェクトを Subversion 管理するときの手順

Eclipse の Java プロジェクトを Subversion 管理するときの手順を、メモも兼ねて残しておこう。ちなみに、Eclipse での Subversion サポートに使っているのは Subclipse プラグイン。

以下の $REPO 変数はプロジェクトを作成する、Subversion レポジトリの URL とする(たとえば、svn+ssh://svn.metareal.org/path/to/repo/project/)。

% mkdir tmp
% cd tmp
% mkdir trunk branches tags
% svn import -m "initial import" . $REPO
% cd ../
% rm -rf tmp

Eclipse で新規 Java プロジェクトを作成する。

そして、新規作成されたプロジェクトのディレクトリに、Subversion レポジトリからチェックアウト。

% cd /path/to/workspace/project/
% svn co $REPO/trunk .

いつも使っているディレクトリレイアウトを作成して必要なものを svn add しておく。

% mkdir -p build/classes build/test-classes build/reports
% mkdir -p docs/api
% mkdir -p src/java src/test
% svn add . --force

不要なものは revert して、svn:ignore を設定。

% svn revert build/*
% svn revert docs/api -R
% svn propset svn:ignore "*" build
% svn propset svn:ignore "api" docs

Eclipse でビルドディレクトリや諸々の設定をすませたらコミット。

% svn commit -m "New project"

Eclipse 側でプロジェクトが Subversion 管理されていないようなら、プロジェクトのアイコンを右クリック、「Team」>「Share Project...」で設定できる(すでにある .svn を認識してくれるので、設定は簡単)。

Subversion を SWIG サポートつきでインストールする

SWIG によるスクリプト言語サポートつきで Subversion をインストールしたときのメモ。

必要なファイルは以下の通り。

  • swig-1.3.31.tar.gz
  • subversion-1.4.2.tar.bz2
  • subversion-deps-1.4.2.tar.bz2

まずは SWIG をインストールする。Ruby はシステム標準のものとは別に 1.8.5-p2 をインストールしていたので、configure でパスを指定してある。

% curl --location -O http://prdownloads.sourceforge.net/swig/swig-1.3.31.tar.gz
% tar xvzf swig-1.3.31.tar.gz
% cd swig-1.3.31
% ./configure --with-ruby=/usr/local/bin/ruby
% make
% sudo make install

Subversion は subversion-1.4.2.tar.bz2subversion-deps-1.4.2.tar.bz2 解凍すると、どちらも subversion-1.4.2 というディレクトリに展開されるので便利だ。

% curl -O http://subversion.tigris.org/downloads/subversion-1.4.2.tar.bz2
% curl -O http://subversion.tigris.org/downloads/subversion-deps-1.4.2.tar.bz2
% tar xvjf subversion-1.4.2.tar.bz2
% tar xvjf subversion-deps-1.4.2.tar.bz2

configure で、SWIG バインディングを有効にする言語と SWIG のパスを指定する。--enable-swig-bindings には perlpython のように個別指定も可能。

また、Subversion で BerkeleyDB を使う場合は、別にオプションが必要かもしれない。今回に限って言えば、BerkeleyDB は必要ないので指定していない。

% cd subversion-1.4.2
% ./configure --enable-swig-bindings=all --with-swig=/usr/local/bin/swig
% make
% sudo make install

次に、バインディングをインストール

% make swig-rb
% sudo make install-swig-rb
% make check-swig-rb

BerkeleyDB 周りでエラーが出てるが無視(BerkeleyDB サポートは入れてないので)。 pl, py も同様に。

% make swig-pl
% sudo make install-swig-pl
% make check-swig-pl
% make swig-py
% sudo make install-swig-py
% make check-swig-py

ViewVC のインストール

あとでブログに書こうと思って残しておいた ViewVC の設定メモ。今日、仕事中に思わず、ファイルを上書きしてしまった

ネタはその日のうちに書いておけ、という教訓。

もっとも、インストールや設定自体は、ほぼ INSTALL ファイルの手順どおりでいけたので、ブログに書くまでもない気がする。気をつける部分といえば、セキュリティ的な理由から、Apache の DocumentRoot 以下にはインストールしないことくらいだろうか(INSTALL ファイルにも書いてあるけど)。

これだけじゃなんなので、httpd.conf も載せておく(パスなどは変えてある)。要点は:

  • mod_python で動かしている
  • 付属の .htaccess は使っていない
  • /viewvc でアクセスできるように ScriptAlias を使う

LoadModule python_module modules/mod_python.so
<VirtualHost *:80>
  ServerName svn.metareal.org
  DocumentRoot /sites/viewvc

  ScriptAlias /viewvc /sites/viewvc/viewvc.py
  <Directory "/sites/viewvc">
    DirectoryIndex viewvc.py
    AddHandler python-program .py
    PythonHandler handler
    PythonDebug On

    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

Want fries with that?

Open Source Projects