Ich habe in einigen Projekten so etwas gesehen:
%Vor% aber ich kann es jetzt nicht finden ...
Nehmen wir zum Beispiel an, wenn die App auf 10.8 ausgeführt wird, macht die App 1 Sache, wenn nicht die App andere Dinge tut.
Was ist zu programmieren, um zu überprüfen, ob es auf 10.8 läuft?
Danke.
Sie stellen wahrscheinlich die falsche Frage. Außer in sehr seltenen Fällen sollte es Ihnen egal sein, welche Systemversion der Benutzer gerade ausführt. Stattdessen sollten Sie prüfen, ob die spezifische Sache, an der Sie interessiert sind, verfügbar ist.
Wenn Apple zum Beispiel eine MagicHologram-Klasse in Mac OS X 10.9 einführt, die Sie verwenden möchten, prüfen Sie nicht, ob der Benutzer Mac OS X 10.9 ausführt. Stattdessen überprüfen Sie, ob die MagicHologram-Klasse verfügbar ist. Wenn ja, können Sie es verwenden. Wenn nicht, ist es nicht verfügbar. Es spielt keine Rolle, warum. Vielleicht laufen sie 10.8. Aber vielleicht ist es fünf Jahre später, und Apple hat beschlossen, die MagicHologram-Klasse ganz fallen zu lassen.
(Denken Sie auch daran, dass Sie eine schwache Verbindung zu HologramKit herstellen müssen, der Bibliothek, die die MagicHologram-Klasse bereitstellt.)
Wenn Sie eine neue Methode für NSString einführen, prüfen Sie, ob NSString die neue Methode kennt, anstatt die Betriebssystemversion zu überprüfen.
Das heißt, NSApplication.h enthält eine externe Konstante namens NSAppKitVersionNumber
. Sie können dies mit Konstanten wie NSAppKitVersionNumber10_7
vergleichen, die (wie zu beachten ist) Zahlen wie 1138 und nicht 10.7 sind. Es gibt nur wenige Orte, an denen dies angebracht ist, vor allem, wenn Klassen privat und nicht dokumentiert waren, aber große Änderungen erfahren haben, bevor sie dokumentiert wurden und Teil der öffentlichen Teile des SDK wurden. Außerdem könnte es hilfreich sein, wenn Sie einen spezifischen Fehler vermeiden möchten, der seither behoben wurde.
Zur Erinnerung:
NSAppKitVersionNumber
und NSAppKitVersionNumber10_7
, um die Fälle abzudecken, in denen die Klassen- oder Methodenerkennung Ihnen anzulasten wäre. operatingSystemVersionString
, was speziell als nicht sicher für das Parsen aufgelistet ist. Referenzen / weitere Informationen:
Ein schneller Weg, es zu tun ist:
%Vor%Weitere hier .
Sie können alle in NSApplication.h verfügbaren Konstanten sehen, die Sie mit Open Quickly ... (Cmd-Shift O) in Xcode erreichen können.
Die Header-Dateien bieten für einige überraschend interessante Lektüre, wenn Sie so geneigt sind.
Wie andere oben gesagt haben (und ich würde Steven Fishers Antwort wählen), wollen Sie normalerweise nicht die Versionsnummer bekommen.
Und wenn Sie nur Vergleiche mit einer Hauptversion von OS X bis zur Version des aktuellen SDK durchführen müssen, das Sie verwenden, ist NSAppKitVersionNumber (wie in Monolos Antwort) der richtige Weg.
Wenn Sie die Versionsnummer aus irgendeinem Grund tatsächlich benötigen (z. B. zum Aufzeichnen von Analysen über Ihre Benutzer, damit Sie entscheiden können, wann Sie die Unterstützung von 10.6.0-10.6.5 beenden sollen), gehen Sie folgendermaßen vor:
%Vor%Für 10.7.3 gibt dies majorVersion = 10, minorVersion = 7, bugFixVersion = 3.
In der 10.7-Dokumentation wurde der Absatz entfernt, der direkt Gestalt als die Möglichkeit zum Abrufen der Betriebssystemversion vorgeschlagen hat, aber noch immer nicht veraltet oder veraltet, und es gibt keine weiteren Vorschläge. Tatsächlich wird jeder andere Weg, um diese Informationen zu erhalten (syntaktisch - [NSProcessInfo operatingSystemVersionString], sysctlbyname auf "kern.osrelease" aufrufen und Darwin-Kernel-Version in OS X-Version konvertieren, etc.) irgendwo anders angegeben. Also, das ist der Weg, es zu tun, wenn du es wirklich willst.
Beachten Sie, dass die neue API möglicherweise nicht dauerhaft ist und in einer zukünftigen Version des Betriebssystems entfernt werden könnte, wie bereits in den Versionshinweisen zu System 6.0.4 von 1989 angegeben.
Sie können die aktuelle Version vom uname -r
-Befehl (das ist eigentlich die Kernel-Version, obwohl es sich leicht auf Mac OS X-Versionen abbildet) vom sw_vers
-Befehl erhalten, der Ihnen den Versionsnamen, die Version und den Build gibt Bezeichner oder von der Gestalt()
-Funktion (in aktuellen Versionen von Mac OS X sowieso). Der sicherste Weg ist wahrscheinlich, die Ausgabe von sw_vers
zu lesen, die sich in einem stabilen Format befindet, das leicht zu analysieren ist.
Beachten Sie, dass Sie wahrscheinlich nicht wissen möchten, auf welcher Version des Betriebssystems Sie sich befinden. Was Sie wahrscheinlich tun möchten, ist zu testen, ob eine bestimmte Funktion verfügbar ist. Dies können Sie durch schwach verlinkte Frameworks, durch schwache Klassenreferenzen oder durch Überprüfen, ob eine Klasse auf Selektoren reagiert, die für das Feature geeignet sind, an dem Sie interessiert sind.
Wie Steven Fisher sagte, sollten Sie nicht nach der Systemversion suchen, sondern nach der Verfügbarkeit der Klasse oder Methode, die Sie verwenden möchten.
Die Überprüfung, ob eine bestimmte Klasse verfügbar ist, verwenden Sie
%Vor%Um zu prüfen, ob eine bestimmte Methode verfügbar ist, verwenden Sie
%Vor%Für die Methodenüberprüfung muss die Methode jedoch auf dem System verfügbar sein, auf dem Sie Ihre App erstellen, oder Sie erhalten einen Kompilierungsfehler.
Sie können die Betriebssystemversion wie folgt erhalten:
%Vor%Ausgabe:
Und ich sehe, Du willst nur Version bekommen. Es kann so gemacht werden: %Vor%
Ergebnis:
Und zum Überprüfen:
%Vor%Tags und Links objective-c xcode macos cocoa osx-mountain-lion