本文中で説明した方法は、PowerPC向けコードとIntel CPU向けコードが、同じバージョンのMac OS Xをサポートする場合に特化されている。Intel CPU向けのMac OS Xは10.4.4以降しか存在せず*、一方Mac OS X 10.3(Panther)を使用するユーザーはまだまだ多い。せっかくUniversal Binaryなのに対象バージョンを10.4以降のみとしたり、10.3とそれ以前のPowerPC版と10.4以降を別ファイルにするのではありがたみが半減する。現実的なアプリケーションとするためには、PowerPC向けにはターゲットSDKにMac OS X 10.3.9を、Intel CPU向けにはMac OS X 10.4.4を使うようにするべきであろう。
Xcode付属のドキュメントである「Cross-Development Pro
gramming Guide」の「クロス開発とUniversal Binary」の項目で、その方法が説明されている。手順だけをザッと述べると次のとおりだ。
設定 | 意味 | 値の例 |
---|---|---|
GCC_VERSION_i386 | コンパイルに使うGCCのバージョンを指定 | 4.0 |
GCC_VERSION_ppc | コンパイルに使うGCCのバージョンを指定 | 3.3 |
MACOSX_DEPLOYMENT_TARGET_i386 | ターゲットにするMac OS Xのバージョンを指定 | 10.4 |
MACOSX_DEPLOYMENT_TARGET_ppc | ターゲットにするMac OS Xのバージョンを指定 | 10.3 |
SDKROOT_i386 | ターゲットSDKのパスを指定 | /Developer/SDKs/MacOSX10.4u.sdk |
SDKROOT_ppc | ターゲットSDKのパスを指定 | /Developer/SDKs/MacOSX10.3.9.sdk |
必須項目は、「MACOSX_DEPLOYMENT_TARGET_<アーキテクチャ名>」と「SDKROOT_<アーキテクチャ名>」の2点だ。前者はビルドツール群にターゲットとなるMac OS Xのバージョンを伝え、後者はターゲットSDKのパスを伝える。
開発言語としてC++もしくはObjective-C++を使用している場合は、必ず「GCC_VERSION_<アーキテクチャ名>」も併せて指定する。GCC 4.0ではC++のABIが変更されているため、C++のソースがある場合、10.4以前で動作するバイナリを生成できないからだ。Carbonベース、あるいはQuickTimeを使ったアプリケーション、そしてIOKitを用いたデバイスドライバなどでC++は使われている。それらのソフトウェアを開発している場合は注意しよう。
Intel CPUを搭載したMacが発表されるまでの間、開発者向けの開発・評価用にDTK(Development Transition Kit)という、Pentium 4を搭載したマシンが貸与されており、そこで動作するMac OS Xは10.4.1〜10.4.3であったとされている。ただし、DTK版は正規のバージョンではなく、貸与された機材とともに回収されているため、ここでは考慮していない。
本記事は、オープンソースマガジン2006年5月号「Undocumented Mac OS X」を再構成したものです。
Copyright © ITmedia, Inc. All Rights Reserved.