実行中のMac OS Xバージョンをプログラムで確認するにはどうすればよいですか?
-
03-07-2019 - |
質問
TigerとLeopardで動作が少し異なるプログラムがあります。実行しているMac OS Xのバージョンを正確に判断できるシステムコールを知っている人はいますか。ビルドマシンのOSを決定するためのマクロ定義をいくつか見つけましたが、実行中のマシンのOSを決定するのに本当に良いものはありません。
ありがとう、 ジョー
解決
ただし、要するに、カーボンを使用している場合はGestalt()呼び出しを使用し、ココアを使用している場合は、NSAppKitVersionNumberという定数を使用して確認することができます。
編集:Mac OSX 10.8以降では、Gestalt()を使用しないでください。詳細については、この回答を参照してください: OS XまたはiOS(Gestaltを使用しない)で実行時にOSバージョンを確認するにはどうすればよいですか?
他のヒント
機能の存在を確認するだけですか?例えば:
if (NSClassFromString(@"NSKeyedArchiver") != Nil)
または
if ([arrayController respondsToSelector: @selector(selectedIndexes)])
オペレーティングシステムが必要なことを実行することはわかっていますが、Appleの製品マーケティンググループが特定の番号を付けたわけではありません;-)
APIはGestalt Managerを使用しています。
" OSバージョンの決定"を参照してください。 CocoaDevサイトで。
端末内:
system_profiler SPSoftwareDataType
与える:
Software:
System Software Overview:
System Version: Mac OS X 10.5.5 (9F33)
Kernel Version: Darwin 9.5.0
Boot Volume: Main
Boot Mode: Normal
Computer Name: phoenix
User Name: Douglas F Shearer (dougal)
Time since boot: 2 days 16:55
または:
sw_vers
与える:
ProductName: Mac OS X
ProductVersion: 10.5.5
BuildVersion: 9F33
OSのバージョンは本当に必要ですか?特定のフレームワークの存在やバージョン番号など、テストするより適切なものがあるかもしれません。
プログラム内でGestaltを使用できます。 OSバージョンを取得するためにプログラムで使用しているコードは次のとおりです。
long version = 0;
OSStatus rc0 = Gestalt(gestaltSystemVersion, &version);
if((rc0 == 0) && (version >= 0x1039)) {
// will work with version 10.3.9
// works best with version 10.4.9
return; // version is good
}
if(rc0) {
printf("gestalt rc=%i\n", (int)rc0);
} else {
printf("gestalt version=%08x\n", version);
}
respondsToSelector:
は、ほぼ確実に、与えられたリリースが実装するものと実装しないものの表を維持するよりも優れています。
怠け者になる。ランタイムが何かを実行できるかどうかを通知し、必要に応じて古いメソッドにフォールバックします。コードの残りの部分で確認しなければならない独自のグローバルデータを維持する必要がないため、コードの脆弱性ははるかに少なくなります。
コマンドラインでこれを実行します:
system_profiler SPSoftwareDataType | grep Mac