14

Tiger と Leopard では動作が少し異なるプログラムがあります。実行中の Mac OS XI のバージョンを正確に判断できるシステム コールを知っている人はいますか? ビルド マシンの OS を特定するためのマクロ定義をいくつか見つけましたが、実行中のマシンの OS を特定するのに適したものは何もありません。

ありがとう、ジョー

4

8 に答える 8

15

この記事はこちら

要するに、カーボンを使用している場合は Gestalt() 呼び出しを使用し、ココアを使用している場合は、単にチェックできる NSAppKitVersionNumber という定数があります。

編集: Mac OSX 10.8 以降では、Gestalt() を使用しないでください。詳細については、この回答を参照してください: OS X または iOS (Gestalt を使用せずに) で実行時に OS バージョンを確認するにはどうすればよいですか?

于 2008-10-01T14:13:32.430 に答える
13

機能の存在を確認していただけますか? 例えば:

if (NSClassFromString(@"NSKeyedArchiver") != Nil)

また

if ([arrayController respondsToSelector: @selector(selectedIndexes)])

そうすれば、Apple の製品マーケティング グループがオペレーティング システムに特定の番号を付けたわけではなく、オペレーティング システムが必要なことを実行することがわかります ;-)

于 2008-10-01T21:52:39.410 に答える
8

API は Gestalt Manager を介して行われます。

CocoaDev サイトの「 Determining OS Version 」を参照してください。

于 2008-10-01T14:15:27.043 に答える
6

ターミナルで:

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
于 2008-10-01T14:10:56.837 に答える
2

OSのバージョンは本当にあなたが望むものですか?特定のフレームワークの存在やバージョン番号など、テストするより適切なものがあるかもしれません。

于 2008-10-01T15:19:52.397 に答える
1

プログラム内で 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);
}
于 2009-07-28T08:07:56.077 に答える
0

コマンドラインでこれを実行します。

system_profiler SPSoftwareDataType | grep Mac
于 2009-03-16T20:07:45.537 に答える
0

respondsToSelector:ほぼ確実に、特定のリリースで実装されているものと実装されていないものの表を維持するよりも優れています。

怠け者になりなさい。何かを実行できるかどうかをランタイムに知らせ、必要に応じて古いメソッドにフォールバックします。コードの残りの部分がチェックし続けなければならない独自のグローバル データを維持する必要がないため、コードの脆弱性が大幅に軽減されます。

于 2008-11-21T21:29:15.710 に答える