NSFoundationVersionNumber in iOS-11 - Wie zu erkennen iOS-version programmgesteuert
In vorherigen iOS-Versionen, die ich verwendet NSFoundationVersionNumber
zu erkennen, die iOS-version:
#define IS_IOS10orHIGHER (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_9_x_Max)
#define IS_IOS9orHIGHER (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_8_3)
#define IS_IOS8orHIGHER (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_7_1)
#define IS_IOS7orHIGHER (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1)
#define IS_IOS6orHIGHER (floor(NSFoundationVersionNumber) >= NSFoundationVersionNumber_iOS_6_0)
...
Nun möchte ich, das gleiche zu tun für iOS 11, aber ich war nicht in der Lage zu finden die richtige NSFoundationVersionNumber
. Die docs zeigen NSFoundationVersionNumber_iOS_9_x_Max
werden die neuesten.
Ja, wie ist die richtige NSFoundationVersionNumber
zu erkennen, ob iOS 11 wird verwendet?
InformationsquelleAutor Andrei Herford | 2017-08-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer der ausgewiesenen Möglichkeiten, um system-version ist mit der systemVersion Eigenschaft von UIDevice.
https://developer.apple.com/documentation/uikit/uidevice/1620043-systemversion?language=objc
NSString *systemVersion = [[UIDevice currentDevice] systemVersion];
Können Sie es auf diese Weise:
[[UIDevice currentDevice] systemVersion] floatValue]
ist11.1999998
auf meinem system. Die standard-float-Rundung-problem, also wenn ich war auf der Suche nach 11.2 würde scheitern.InformationsquelleAutor Adam
Wenn Sie mit Xcode 9 oder höher verwenden, können Sie die
@available
Attribut:Swift, es ist das gleiche, aber geschrieben
#available
statt@available
.Dem Grund, dass dies ein besserer Weg, dies zu tun als die anderen Methoden ist, da der compiler es gewahr wird, und unterdrückt Verfügbarkeit Warnungen entsprechend. Also im Beispiel oben, können Sie APIs verwenden, die eingeführt wurden in iOS 11.0 innerhalb der
if
block, ohne davor gewarnt, über diese APIs nicht verfügbar, um für Ihr Projekt die Bereitstellung Ziel.Als pro meinen Kommentar oben, die akzeptierten Antworten können Rundungsfehler durch Vergleiche mit Schwimmer - immer wieder eine Quelle subtiler Fehler. IMO ist dies der viel bessere Weg.
Um klar zu sein, IMO diese Antwort von @CharlesSrstka ist richtig und sollte die akzeptierten Antworten, nicht die, die mit einem float-Vergleich der
systemVersion
, als dass kann dazu führen, subtile Fehler.Ist
@available
die einzige Bedingung, die in Ihremif
- Anweisung, oder Sie kombinieren es mit etwas anderes über&&
oder||
? Letztere erhalten Sie diese Warnung. Leider ist die Verfügbarkeit zu überprüfen hat, um von sich aus.iOS 11 (oder welche version du auch prüfen) und oben. Wenn Sie brauchen, um insbesondere prüfen, ob einer bestimmten OS-version, sind Sie wahrscheinlich besser dran mit
NSProcessInfo
'soperatingSystemVersion
Eigenschaft: developer.apple.com/documentation/foundation/nsprocessinfo/...InformationsquelleAutor Charles Srstka
Apple NSProcessInfo
Apple bietet nun die NSOperatingSystemVersion struct in NSProcessInfo
Können Sie es verwenden, mit dem isOperatingSystemAtLeastVersion: oder prüfen Sie einfach die 3 Felder genau zu wissen, welche system-version ausgeführt wird, Ihre app.
Es ist sowohl in obj-c und swift
InformationsquelleAutor cole