通常、実行時に 64 ビットか 32 ビットかを確認できる必要はありません。ホスト アプリケーション (64 ビットまたは 32 ビット ツールを起動するアプリと呼びます) がファット バイナリである場合、コンパイル時のチェックで十分です。これは 2 回コンパイルされ (1 回はファット バイナリの 32 ビット部分用、もう 1 回は 64 ビット部分用)、システムによって正しいものが起動されるため、適切な起動コードでコンパイルするだけです。書き込みます。お気に入り
#if __LP64__
NSString *vExecutablePath = [[NSBundle mainBundle] pathForResource: @"tool64" ofType: @""];
#else
NSString *vExecutablePath = [[NSBundle mainBundle] pathForResource: @"tool32" ofType: @""];
#endif
[NSTask launchedTaskWithLaunchPath: vExecutableName ...];
ユーザーがなんらかの方法で 64 ビット Mac で 32 ビットのアプリを明示的に起動した場合は、ユーザーが何をしているかを知っていると信頼してください。いずれにせよ、これは特殊なケースであり、パワー ユーザーが間違った完璧な感覚から抜け出す理由です。回避策が 32 ビットとして起動されることをユーザーに伝えることができれば、64 ビットのみのバグを発見した場合でも、自分自身が喜ぶかもしれません。
アプリ自体が 32 ビットのみの場合 (例: コマンドライン ヘルパーを使用した Carbon GUI) は、実際のランタイム チェックのみが必要です。その場合、何らかの奇妙な理由で 2 つの実行可能ファイルを一緒に lipo できない場合は、おそらく host_processor_info または sysctl などを使用するしかありません。