14 Stimmen

Wie kann ich die laufende Mac OS X-Version programmatisch ermitteln?

Ich habe ein Programm, das sich unter Tiger etwas anders verhalten muss als unter Leopard. Kennt jemand einen Systemaufruf, mit dem ich genau feststellen kann, welche Version von Mac OS X ich verwende? Ich habe eine Reihe von Makrodefinitionen gefunden, um das Betriebssystem des Build-Rechners zu bestimmen, aber nichts wirklich Gutes, um das Betriebssystem des laufenden Rechners zu bestimmen.

Danke! Joe

0 Stimmen

15voto

Nik Reiman Punkte 37385

Siehe diesen Artikel hier

Aber kurz gesagt, wenn Sie Carbon verwenden, verwenden Sie den Aufruf Gestalt(), und wenn Sie Cocoa verwenden, gibt es eine Konstante namens NSAppKitVersionNumber, die Sie einfach überprüfen können.

Editar : Für Mac OSX 10.8 und höher, verwenden Sie nicht mehr Gestalt(). Siehe diese Antwort für weitere Details: Wie kann ich die Betriebssystemversion zur Laufzeit in OS X oder iOS bestimmen (ohne Gestalt zu verwenden)?

4 Stimmen

Wie in dem verlinkten Artikel beschrieben, ist die Überprüfung gegen NSAppKitVersionNumber nicht so gut, da sie die Version von AppKit angibt, nicht die Version von Mac OS X. Die beiden sind nicht linear korreliert.

3 Stimmen

Sie sollten jedoch weiterhin in der Lage sein, Gestalt() aus Obj-C-Code aufzurufen.

2 Stimmen

Der Aufruf Gestalt() ist seit 10.8 veraltet und sollte nicht mehr verwendet werden. Siehe stackoverflow.com/questions/11072804/

13voto

Könnten Sie einfach prüfen, ob eine Fähigkeit vorhanden ist? Zum Beispiel:

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

oder

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

dann wissen Sie, dass das Betriebssystem das tut, was Sie brauchen, und nicht, dass die Produktmarketinggruppe von Apple ihm eine bestimmte Nummer gegeben hat ;-)

0 Stimmen

Für die meisten Situationen ist dies wahrscheinlich besser. Danke :)

0 Stimmen

Wenn Sie etwas Bestimmtes verwenden, das möglicherweise nicht auf dem System vorhanden ist, ist dies eine sehr gute Idee und wird von Apple immer empfohlen. Wenn Sie eine projektweite Grundsatzentscheidung treffen, nur eine bestimmte Mindestversion des Betriebssystems zu unterstützen, und Sie Tester haben, die mit dieser Version und höher testen, dann sollten Sie auch die Betriebssystemversion überprüfen. Eine einfache Möglichkeit, dies zu tun, ist das Hinzufügen des Schlüssels LSMinimumSystemVersion in Ihrer Info.plist-Datei.

8voto

S.Lott Punkte 371691

Die API erfolgt über den Gestalt Manager.

Siehe " Ermitteln der OS-Version " auf der CocoaDev-Website.

6voto

Douglas F Shearer Punkte 24586

Im Terminal:

system_profiler SPSoftwareDataType

Gibt:

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

Ou :

sw_vers

Gibt:

ProductName:    Mac OS X
ProductVersion: 10.5.5
BuildVersion:   9F33

1 Stimmen

Und daraus schließe ich: sw_vers | awk '/ProductVersion/ {print $2}' Sehr hilfreich. Danke!

2voto

Mark Baker Punkte 5408

Ist die OS-Version wirklich das, was Sie wollen? Vielleicht gibt es geeignetere Tests, wie z. B. das Vorhandensein oder die Versionsnummer eines bestimmten Frameworks.

0 Stimmen

Einer der Gründe für mein Interesse an der Bestimmung der Betriebssystemversion ist, dass die Unterstützung für die Hardware-Stereo-Visualisierung in Leopard nicht mehr richtig funktioniert, in Tiger jedoch weiterhin. Beide Versionen zeigen die Unterstützung dafür an, aber nur Tiger macht es richtig.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X