2006.01.21

ユニバーサルバイナリの軽量化

intel Mac が発売されてから、続々とユニバーサルバイナリ化されたアプリがリリースされています。ユニバーサルバイナリついては「OS X ハッキング! 」の記事が詳しいのですが、複数の異なるCPUのコードを一つのバイナリファイルに収めているので、アプリケーションをPowerPC 用 Intel 用と別々に用意して配布する必要がなくなります。

最近バージョンアップした iTunes もユニバーサルバイナリで配布されています。

% pwd
/Applications/iTunes.app/Contents/MacOS
% file iTunes 
iTunes: Mach-O fat file with 2 architectures
iTunes (for architecture ppc):  Mach-O executable ppc
iTunes (for architecture i386): Mach-O executable i386

複数のCPUコードが含まれる為にバイナリファイルのサイズは大きくなりますが、アプリケーション全体では画像や言語リソースが占める割合が大きいのでトータルサイズはそう大きくなりません。でも iTunes のようにバイナリファイルの元々のサイズが大きいと、ユニバーサルバイナリ化してかなり肥大してしまいます。

% ls -l
-rwxrwxr-x   1 root  admin  18207060 12 21 14:18 iTunes

ファイルサイズだけでなく、必要ないものは削除してスッキリしたいなと思う私のような人も要ると思います。そういう時に使うのがユニバーサルバイナリ用のユーティリティ /usr/bin/lipo コマンドです。このコマンドを使うと夫々のCPU向けコードを分離したり削除したりすることが出来ます。

Intel CPU 向けコードを分離したり

% lipo -extract i386 -output iTunes-i386 iTunes 
% ls -l
-rwxrwxr-x   1 root     admin  18207060 12 21 14:18 iTunes*
-rwxr-xr-x   1 root  admin   9085268  1 21 19:16 iTunes-i386*
% file iTunes-i386
iTunes-i386: Mach-O fat file with 1 architecture
iTunes-i386 (for architecture i386):    Mach-O executable i386

削除したり

% lipo -remove i386 -output iTunes-ppc iTunes
% file iTunes-ppc 
iTunes-ppc: Mach-O fat file with 1 architecture
iTunes-ppc (for architecture ppc):      Mach-O executable ppc

ユニバーサルバイナリが for PowerPC になって、サイズも減量

060121_ubinary1.png

なおコマンドの詳しいオプションの説明は、man lipo で。

関連記事

この記事へのトラックバックURL
http://wildlifesanctuary.blog38.fc2.com/tb.php/34-15458dba
この記事へのトラックバック
この記事へのコメント