Ich habe mich gefragt, ob es möglich ist festzustellen, um welche Art von iPhone (zum Beispiel) es sich bei dem aktuellen Gerät handelt. Ich weiß, dass es möglich ist, das Modell zu erhalten, über
NSString *deviceType = [[UIDevice currentDevice] model];
das nur zurückgegeben wird, ob ich ein "iPhone" oder einen "iPod" habe, ABER ich habe mich gefragt, ob es möglich ist, zu erkennen / zu wissen, ob ich ein iPhone 3GS vs. und ein iPhone 4 vs. ein iPhone 4S (eigentlich möchte ich nur feststellen, ob ich ein 3G habe oder nicht, weil ich ziemlich grafikintensive Sachen mache) .
Also ja, lass es mich wissen, danke!
ios
objective-c
iphone
ipad
Nathan Fraenkel
quelle
quelle
Antworten:
Probieren Sie diese Bibliothek aus: http://github.com/erica/uidevice-extension/ (von Erica Sadun). (Die Bibliothek ist 7-8 Jahre alt und daher veraltet)
(Beispielcode):
ODER Sie können diese Methode verwenden:
Sie können die Gerätemodellnummer mit uname aus sys / utsname.h abrufen. Beispielsweise:
Ziel c
Swift 3
Das Ergebnis sollte sein:
quelle
Als Erweiterung der obigen Antwort von OhhMee habe ich einige ausfallsichere Elemente hinzugefügt, um zukünftige Geräte zu unterstützen, die (noch) nicht in der Liste enthalten sind:
Ich habe auch die detaillierten Informationen weggelassen (z. B. "Modell A1507, A1516, A1526 (China), A1529 | Global") und sie stattdessen in die Kommentare eingefügt, falls Sie diese als benutzerbezogene Zeichenfolgen verwenden und sie nicht ausflippen möchten.
Bearbeiten: Diese Antwort bietet eine ähnliche Implementierung mit Swift 2.
Edit 2: Ich habe gerade die iPad Pro-Modelle (beide Größen) hinzugefügt. Zum späteren Nachschlagen sind die Modellnummern / etc. finden Sie im iPhone Wiki .
Bearbeiten 3: Unterstützung für iPhone XS, iPhone XS Max und iPhone XR hinzufügen.
Bearbeiten 4: Unterstützung für iPhone 11, iPhone 11 Pro und iPhone 11 Pro Max hinzufügen.
quelle
deviceName
gesucht, als ich suchen wolltecode
. Jemand schlug eine Änderung vor, aber ich konnte sie nicht genehmigen, bevor andere sie ablehnten, und korrigierte die Antwort selbst. Vielen Dank an alle, die es vorgeschlagen haben.Ich habe die plist-Datei erstellt, damit Sie den vollständigen Namen für jedes Gerät erhalten (Quellcode direkt am Ende meiner Antwort).
Basierend auf OhhMees Antwort können Sie es folgendermaßen verwenden:
Swift 4.0
Vergessen Sie nicht,
#import <sys/utsname.h>
Ihren Bridging-Header hinzuzufügen .Ziel c
Die Plist-Datei:
quelle
[[UIDevice currentDevice] model]
Gibt nur zurückiPhone
oderiPod
Sie erhalten nicht die Nummern des Modells, mit denen Sie zwischen verschiedenen Gerätegenerationen unterscheiden können.Codieren Sie diese Methode:
Rufen Sie die Methode auf,
[self getModel]
wann immer Sie das Modell benötigen, und Sie erhalten zB: "iPhone5,1" für das lächerlich dünne und schnelle iPhone 5.Eine gute Vorgehensweise besteht darin, eine Klasse namens dort zu erstellen
Utils.h/Utils.m
und Methoden wiegetModel
diese einzufügen, damit Sie diese Informationen von überall in Ihrer App abrufen können, indem Sie einfach die Klasse importieren und aufrufen[Utils getModel];
quelle
Ich habe die Implementierung von NicolasMiari optimiert und hier hinzugefügt
Simulator
:`` `
quelle
Unten ist der Code dafür ( Code enthält möglicherweise nicht die gesamte Zeichenfolge des Geräts. Ich bin mit anderen Leuten zusammen, die den gleichen Code auf GitHub beibehalten. Bitte nehmen Sie den neuesten Code von dort. )
Ziel-C : GitHub / DeviceUtil
Swift : GitHub / DeviceGuru
quelle
Eine Kategorie, um von der NSString-Beschreibung abzuweichen
Im Allgemeinen ist es wünschenswert, willkürliche Zeichenfolgenvergleiche im gesamten Code zu vermeiden. Es ist besser, die Zeichenfolgen an einer Stelle zu aktualisieren und die magische Zeichenfolge vor Ihrer App zu verbergen. Zu
UIDevice
diesem Zweck biete ich eine Kategorie an .Für meine spezifischen Anforderungen muss ich wissen, welches Gerät ich verwende, ohne Einzelheiten über die Netzwerkfähigkeit zu kennen, die auf andere Weise leicht abgerufen werden können. Sie finden also eine gröbere Körnung
enum
als die ständig wachsende Liste von Geräten.Beim Aktualisieren muss das Gerät zur Aufzählung und zur Nachschlagetabelle hinzugefügt werden.
UIDevice + NTNUExtensions.h
UIDevice + NTNUExtensions.m
quelle
Gerätename und Computernamen, basierend auf iOS Real Device Hardware
Meine Lösung für dieses Problem sieht im Wesentlichen nach der Antwort von @NicolasMiari in diesem Thread aus. Die separate Dienstprogrammklasse verfügt über einen vordefinierten Satz von Geräte- und Computernamen. Rufen Sie dann abhängig vom tatsächlichen Computernamen den Gerätenamen ab.
Hinweis: Diese Antwort und das verknüpfte GitHub-Projekt wurden aktualisiert, um die neuesten iPhones (iPhone 8, 8+, X) ab Oktober 2017 zu identifizieren . Dies funktioniert auch unter iOS11 . Bitte besuchen Sie das GitHub-Repo und sehen Sie, und geben Sie mir Feedback, wenn etwas nicht stimmt.
Ich habe diese Implementierung und einige andere praktische Dienstprogrammmethoden in einer Klasse hinzugefügt und dort in diesem GitHub-Repository veröffentlicht . Auf dieser Wiki-Seite finden Sie auch die aktuelle Liste mit Geräteinformationen .
Bitte besuchen Sie es und nutzen Sie es.
Aktualisieren:
Möglicherweise müssen Sie das sys-Framework importieren.
quelle
Swift 3 kompatibel
quelle
Diese Lösung funktioniert sowohl für physische Geräte als auch für den iOS-Simulator so, dass der Simulator dasselbe Modell zurückgibt, das ein physisches Gerät für ein Modell zurückgeben würde, z. B. "iPhone10,6" für iPhone X (GSM) anstelle von "x86_64".
Definition - Swift 4:
Verwendung:
quelle
quelle
Die folgende Funktion funktioniert perfekt unter iOS7 oder einer höheren Version in Swift
quelle
Fügen Sie eine neue Datei mit folgendem Code hinzu und rufen Sie einfach auf.
UIDevice.modelName
Dies umfasst alle Modelle, die bis zum Datum veröffentlicht wurden, einschließlich der iPhone 11- Serie und in Swift 5.0quelle
Um Zeit für andere zu sparen. Weil akzeptiert, muss abgestimmt antworten Antwort Bibliothek vorschlagen, die private API verwendet und meine App wurde wegen uidevice-Erweiterung erst gestern abgelehnt! Ich wechsle zur GBDeviceInfo-Bibliothek, die ebenfalls als Pod installiert ist. Im Moment sieht sie gut aus, wird gewartet und auf die neuesten Geräte aktualisiert.
quelle
Swift 4 oder höher
quelle
ProcessInfo.processInfo.environment["SIMULATOR_DEVICE_NAME"]
ist genug.Warum nicht eine Kategorie erstellen? Verwenden Sie kein Sicherheitsleck bei der Malloc-Methode. Verwenden Sie sichere Funktionen.
Siehe die Implentationen
quelle
Wenn Sie eine Liste von Geräten haben (z. B. von @Tib oben unter https://stackoverflow.com/a/17655825/849616 verwaltet ), um damit umzugehen , wenn Sie Swift 3 verwenden würden:
Später können Sie es mit aufrufen
UIDevice.modelName()
.Zusätzliche Credits gehen an @Tib (für Plist), @Aniruddh Joshi (für
deviceSystemCode()
Funktion).quelle
Was ist mit ideviceinfo , um diese Werte zu erhalten? Sollte in der Lage sein, es mit zu installieren
brew install ideviceinfo
Dann renne:
quelle