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

1voto

neoneye Punkte 47046

Innerhalb Ihres Programms können Sie Gestalt verwenden. Hier ist der Code, den ich für mein Programm verwende, um die Betriebssystemversion 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);
}

2 Stimmen

Besser ist es, die separaten Selektoren für die Versionsnummernkomponente zu verwenden, nur für den Fall, dass Apple jemals über 0xf in der Minor- oder Bug-Fix-Nibble hinausgeht. (In der Tiger-Serie sind sie bereits bis zu 0xb gekommen.)

0 Stimmen

Sehr guter Punkt. gestaltSystemVersionMajor und gestaltSystemVersionMinor. Danke. Werde ich verwenden.

0voto

Joe McMahon Punkte 3126

respondsToSelector: ist mit Sicherheit besser, als wenn Sie eine Tabelle darüber führen, was in bestimmten Versionen implementiert ist und was nicht.

Sei faul. Lassen Sie sich von der Laufzeit sagen, ob sie etwas tun kann oder nicht, und greifen Sie bei Bedarf auf ältere Methoden zurück. Ihr Code wird weit weniger anfällig sein, weil Sie nicht Ihre eigenen globalen Daten pflegen müssen, die der Rest Ihres Codes ständig überprüfen muss.

0voto

Brock Woolf Punkte 45353

Führen Sie dies in der Befehlszeile aus:

system_profiler SPSoftwareDataType | grep Mac

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