
- Xcode を使ってみた-
ゼロリンク
Xcode で追加されたビルド機能の中で、比較的早くから喧伝されていたのがゼロリンク。その名の通り、アプリケーションをビルドする際にリンクをしないことで、ビルドの時間を短縮する、っていうのが売りだ。どういう仕組みになっているのか、見てみよう。
ゼロリンクを使う
ゼロリンクを使うには、プロジェクトのスタイルで設定する。ゼロリンクのチェックボックスを選択すればいい。
デフォルトのプロジェクトだと、プロジェクトのスタイルに Development と Deployment の 2 つがあって、Development ではゼロリンクが有効に、Deployment ではゼロリンクが無効になっている。後で説明するけど、配布するアプリケーションを作るときは、Deployment を選択してゼロリンクを無効にしておこう。
ちなみに、Project Builder で作られた古いプロジェクトではゼロリンクは使えないようだ。ゼロリンクを利用するには、Xcode ネイティブのプロジェクトを作る必要がある。
図1 ゼロリンクを有効にする

ゼロリンクの仕組み
さて、果たしてゼロリンクとはどういう仕組みなのか?少し突っ込んでみよう。まず、ゼロリンクを有効にしてアプリケーションをビルドしてみよう。見た目はいつも通りのアプリケーションができる。ダブルクリックすると普通に起動する。でも、実は普通のアプリケーションパッケージとは違うのだ。
まず、ファイルサイズが違う。試しに、ゼロリンクを有効、無効を切り替えてビルドをして大きさを比べてみてくれ。ぜんぜん違うでしょ。ゼロリンク有効の方が小さい。なんでかっていうと、実は、ゼロリンクのアプリケーションには .o が含まれていないんだ。ただ、ビルドの中間ファイルがおいてあるディレクトリの中にある .o ファイルのパスを持っているだけなんだ。
つまり、こういうことだ。通常のアプリケーションでは、ファイルをコンパイルして、.o を作って、それをリンクして 1 つのファイルにまとめて、アプリケーションパッケージにコピーする。だけどゼロリンクでは、コンパイルされた .o ファイルへのパスだけがアプリケーションに渡されるんだ。で、起動するときに、そのパスにある .o をリンクするんだ。
試しに、ゼロリンクアプリケーションを作って、そのプロジェクトの(アプリケーションの中じゃない) build ディレクトリにある、.o を含んでいるディレクトリを移動してみよう。アプリケーションは、次のようなエラーを吐いて、起動できなくなるから。
ZeroLink: could not load .o file:
/Users/mkino/Desktop/Test/build/Test.build/
Test.build/Objects-normal/ppc/main.ob
ZeroLink: unknown symbol '_main'
Xcode が出た当初に、「ゼロリンクのアプリケーションが、配布先で起動できない」っていう問題があちこちで起きてたけど、こういう仕組みなら、そりゃ無理だよね。ちなみに、そういうアプリケーションを起動しようとすると、
dyld: 「アプリケーション名」 can't open library:
/System/Library/PrivateFrameworks/ZeroLink.framework/
Versions/A/ZeroLink
(No such file or directory, errno = 2)
っていうメッセージが出る。これは、そのままの意味は、「Zerolink フレームワークがなくて起動できない」っていうことだ。Zerolink フレームワークは開発環境と一緒にインストールされるから、一般のユーザの環境には入っていないでしょう。でも、仮に Zerolink フレームワークが入っていたとしても、起動できるわけがない。だって、.o が入っていないんだから。
ということで、アプリケーションを配布するときは、絶対、絶対、絶対にゼロリンクは無効にしておこう。ビルドスタイルを Deployment に切り替えよう。そうじゃないと、空っぽのアプリケーションを配布するっていう、間抜けなことになっちゃうよ。
