-新しくなったプロジェクトウィンドウ
-スマートグループ
-コード補完
-ゼロリンク

- 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 に切り替えよう。そうじゃないと、空っぽのアプリケーションを配布するっていう、間抜けなことになっちゃうよ。


[Home] [Download] [Archives] [BBS] [Cocoa Programming Tips 1001] [Core Foundation の秘密] [Safari Developer Center] [はじめてのブラウザのつくり方] [Sketch BP] [スクリーンセイバーを作ろう] [Objective-C 最適化] [Authorization API 完全理解] [Mac OS X Programming Books Review] [オブジェクト指向の言語比較論] [panther-dev]

mailto: mkino@xd5.so-net.ne.jp