Frage

Ich habe ein Programm, das als auf Leopard etwas anders auf Tiger verhalten muss. Weiß jemand, der einen Systemaufruf, die mir erlauben, genau zu bestimmen, welche Version von Mac OS X Ich betreibe. Ich habe eine Reihe von Makrodefinitionen fand die OS der Maschine zu bauen, um zu bestimmen, aber nichts wirklich gut das Betriebssystem der laufenden Maschine zu bestimmen.

Danke, Joe

War es hilfreich?

Lösung

diesen Artikel hier sehen

Aber kurz gesagt, wenn Sie Kohlenstoff verwenden, verwenden Sie die Gestalt () -Aufruf, und wenn Sie Kakao verwenden, gibt es eine Konstante genannt NSAppKitVersionNumber, die man einfach gegen können überprüfen.

Bearbeiten : Für Mac OS X 10.8 und höher, verwendet Gestalt nicht () mehr. Sehen Sie diese Antwort für weitere Informationen: Wie die OS-Version zur Laufzeit in OS X oder iOS ich bestimmen (ohne Gestalt verwendet wird)?

Andere Tipps

Könnten Sie überprüfen auf das Vorhandensein einer Fähigkeit? Zum Beispiel:

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

oder

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

dann wissen Sie, dass das Betriebssystem tut, was Sie es brauchen nicht zu tun, dass Apples Produkt-Marketing-Gruppe gab es eine bestimmte Zahl; -)

Die API ist durch die Gestalt-Manager.

Siehe " Bestimmung OS Version " im CocoaDev Website.

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

Oder:

sw_vers

Gibt:

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

Ist die OS-Version wirklich das, was Sie wollen? Es kann eine geeignetere Sache zu prüfen, wie das Vorhandensein von oder Versionsnummer, einen bestimmten Rahmen.

in Ihrem Programm können Sie Gestalt verwenden. Hier ist der Code, den ich für mein Programm bin mit der OS-Version zu erhalten.

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: mit ziemlicher Sicherheit ist besser als eine Tabelle der Gegebene Releases tut Aufrechterhaltung und nicht implementieren.

Seien Sie faul. Lassen Sie die Laufzeit Ihnen sagen, ob es etwas tun kann oder nicht, und fällt zurück zu älteren Methoden, wenn Sie benötigen. Ihr Code wird weit weniger zerbrechlich sein, weil Sie müssen nicht Ihre eigenen globalen Daten pflegen, dass der Rest des Codes hat mit zu halten überprüfen.

Führen Sie diese in der Befehlszeile:

system_profiler SPSoftwareDataType | grep Mac
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top