2009-05-20 5 views
14

私はOS Xのシステムバージョンを取得したい:10.5.4,10.4.8など私は私のアプリでそれを取得したい、これを行うには?ありがとう!OS Xシステムのバージョンを取得するには?

+0

@JakePetroulesこれは、7年前に尋ねられた場合、どのように複製される可能性があり、擬似オリジナル - 4年前です!日付をご覧ください。 –

+0

他の質問には正解が受け入れられているためです。これには、一番下にあるものを除いて、間違ったまたは古い回答がすべて含まれています。 Stack Overflowは、質問と回答の履歴ログではなく、回答を見つけるためのWikiです。 –

答えて

11

あなたは、ゲシュタルトを使用することができます。あなたがチェックしている場合

SInt32 version = 0; 
Gestalt(gestaltSystemVersion, &version); 
BOOL leopard = (version >= 0x1050); 

if (leopard) 
{ 
    //draw it this way 
} 
else 
{ 
    //draw it that way 
} 

は、メソッドが利用可能であるかどうか、それはrespondsToSelectorを使用して、直接それをテストする方が良いでしょうに注意してください:。

+14

gestaltSystemVersionは、10.4という制限があるため、gestaltSystemVersionMajor、gestaltSystemVersionMinor、およびgestaltSystemVersionBugFixの方が10.4であるため、推奨されません。例えば、10.4.10と.11は、あなたのコードを使って検出することは不可能です。 – smorgan

+5

Gestaltは10.8で廃止されましたので、10.6 - 10.8で動作する別の方法がありますか? – adib

+4

gestaltSystemVersionは10.10を表すことができないので、この回答は間違っています。 –

7

再度、ゲシュタルトを使用できます。詳細については、ドキュメントを参照してください。具体的には、あなたは他の人がMac用のGoogleのツールボックスに言及している呼び出し、ゲシュタルトの周りにココアのラッパーもありますGestalt Manager Reference documentation

0

の「システムバージョン定数」の部分にgestaltSystemVersionMajorgestaltSystemVersionMinor、およびgestaltSystemVersionBugFix定数を渡すことをお勧めします: http://code.google.com/p/google-toolbox-for-mac/source/browse/trunk/Foundation/GTMSystemVersion.h

+0

Mehは、単純なチェックの価値よりも面倒なようです。たぶん私は既にGTMを使っていたかもしれませんが、 'gestaltSystemVersionMinor'をチェックする方が簡単です。 –

19

あなたがでプロパティリストを読み込む「/System/Library/CoreServices/SystemVersion.plistおよび抽出物 『PRODUCTVERSION』キーを、これはOS Xのインストーラアプリケーションがそれをしない方法であることができますここでは例です:。

NSString *versionString; 
NSDictionary * sv = [NSDictionary dictionaryWithContentsOfFile:@"/System/Library/CoreServices/SystemVersion.plist"]; 
versionString = [sv objectForKey:@"ProductVersion"]; 

あるいは、コマンドswvers -productVersionも同じことを行います。

+0

これは動作しますが、ディスクI/Oが発生するため、不要です。ゲシュタルトははるかに優れた(そしてより速い)代替品です。 –

+2

しかし、10.8以降では廃止されました。これが現在利用可能な最善の方法だと思われます。 この質問を参照してください:http://stackoverflow.com/questions/11072804/mac-os-x-10-8-replacement-for-gestalt-for-testing-os-version-at-runtime – hobotron

+0

ありがとう、最高のソリューション私は10時から見つかった8 –

11
NSString *osver() 
{ 
    SInt32 versionMajor=0, versionMinor=0, versionBugFix=0; 
    Gestalt(gestaltSystemVersionMajor, &versionMajor); 
    Gestalt(gestaltSystemVersionMinor, &versionMinor); 
    Gestalt(gestaltSystemVersionBugFix, &versionBugFix); 
    return [NSString stringWithFormat:@"%d.%d.%d", versionMajor, versionMinor, versionBugFix]; 
} 
+0

私が探していたもの。 – David

+2

悲しいことに、ゲシュタルトは10.8から廃止されました。 –

9

-[NSProcessInfo operatingSystemVersionString]は、人間が読み取り可能でローカライズされています。バグの電子メールなどでユーザーに表示したり使用したりするのに適していますが、解析には適していません。

+0

+1:とてもいいです。私は '-operatingSystemVersionString'を呼び出すためのインスタンスを取得するためにクラスメソッド' + processInfo'に言及することを少し編集しました。 – ArtOfWarfare

+0

Cコードから[NSProcessInfo operatingSystemVersionString]を呼び出すことは可能ですか? – Vlad

+0

いいえ。C++から呼び出すためには、ラッパーメソッドを作成する必要があります。そのためには、Objective-Cをプログラムに追加する必要があります。そのファイルをObjective-C++にすることができます.Gestaltを使うこともできます。system()を使ってコマンドラインからswvers-productVersionを呼び出すこともできますし、ファイルシステムから読み込むこともできます。それはあなたの状況とあなたが何をしようとしているかによって異なります。 – brant

0

使用この方法、それは10_10後のMac OS Xのバージョン

+(SInt32) OSVersion; 
{ 
    SInt32 osxMinorVersion; 
    Gestalt(gestaltSystemVersionMinor, &osxMinorVersion); 
    return osxMinorVersion; 
} 
0

を返し、8_0が全てで
NSOperatingSystemVersion構造体
を返します
[NSProcessInfo processInfo].operatingSystemVersion
になり、より良い&最も簡単な方法を提示しました。 3つの数字。

関連する問題