Je me demandais s'il était possible de déterminer quel type d'iPhone (par exemple) le périphérique actuel est? Je sais qu'il est possible de faire passer le modèle
NSString *deviceType = [[UIDevice currentDevice] model];
qui reviendra simplement si j'ai un "iPhone" ou un "iPod", MAIS je me demandais s'il était possible de détecter / savoir si j'ai un iPhone 3GS vs et iPhone 4 vs un iPhone 4S (en réalité, tout ce que je veux vraiment faire est de déterminer si j'ai une 3G ou non, car je fais des trucs assez graphiques) .
Alors oui, faites le moi savoir, merci!
ios
objective-c
iphone
ipad
Nathan Fraenkel
la source
la source
Réponses:
SOIT essayez cette bibliothèque: http://github.com/erica/uidevice-extension/ (par Erica Sadun). (La bibliothèque a 7-8 ans et est donc obsolète)
(Exemple de code):
OU Vous pouvez utiliser cette méthode:
Vous pouvez obtenir le numéro de modèle du périphérique en utilisant uname à partir de sys / utsname.h. Par exemple:
Objectif c
Swift 3
Le résultat devrait être:
la source
En développant la réponse d'OhMee ci-dessus, j'ai ajouté une sécurité intégrée pour prendre en charge les futurs appareils non (encore) inclus dans la liste:
J'ai également omis les informations détaillées (par exemple, "modèle A1507, A1516, A1526 (Chine), A1529 | Global") et je l'ai placé dans les commentaires à la place, au cas où vous voudriez l'utiliser comme chaînes face à l'utilisateur et ne pas les faire flipper.
Edit: Cette réponse fournit une implémentation similaire à l'aide de Swift 2.
Edit 2: je viens d'ajouter les modèles iPad Pro (les deux tailles). Pour référence future, les numéros de modèle / etc. peut être trouvé dans le iPhone Wiki .
Edit 3: Ajoutez la prise en charge de l'iPhone XS, de l'iPhone XS Max et de l'iPhone XR.
Edit 4: Ajoutez la prise en charge de l'iPhone 11, iPhone 11 Pro et iPhone 11 Pro Max.
la source
deviceName
, quand j'avais l'intention de cherchercode
. Quelqu'un a suggéré une modification, mais je n'ai pas pu l'approuver avant que d'autres personnes l'aient rejeté, j'ai donc corrigé la réponse moi-même. Merci à celui qui l'a suggéré.J'ai créé le fichier plist pour vous aider à obtenir le nom complet de chaque appareil (code source à la fin de ma réponse)
Sur la base de la réponse d'OhhMee , vous pouvez l'utiliser comme ceci:
Swift 4.0
N'oubliez pas d'ajouter
#import <sys/utsname.h>
votre en-tête de pontage.Objectif c
Le fichier plist:
la source
[[UIDevice currentDevice] model]
renvoie simplementiPhone
ouiPod
, vous n'obtenez pas les numéros du modèle qui vous permettraient de différencier les différentes générations d'appareils.Codez cette méthode:
Et appelez la méthode
[self getModel]
chaque fois que vous avez besoin du modèle et vous obtiendrez par exemple: "iPhone5,1" pour l'iPhone 5 ridiculement mince et rapide.Une bonne pratique consiste à créer une classe appelée
Utils.h/Utils.m
et à mettre des méthodes comme celle-getModel
ci afin que vous puissiez obtenir ces informations de n'importe où dans votre application simplement en important la classe et en appelant[Utils getModel];
la source
J'ai optimisé l'implémentation de NicolasMiari et ajouté
Simulator
ici:`` ''
la source
Voici le code pour cela (le code peut ne pas contenir toutes les chaînes de l'appareil, je suis avec d'autres gars qui conservent le même code sur GitHub, alors veuillez prendre le dernier code à partir de là )
Objectif-C : GitHub / DeviceUtil
Swift : GitHub / DeviceGuru
la source
Une catégorie pour sortir de la description de NSString
En général, il est souhaitable d'éviter les comparaisons de chaînes arbitraires dans votre code. Il est préférable de mettre à jour les chaînes au même endroit et de masquer la chaîne magique de votre application. Je fournis une catégorie à
UIDevice
cet effet.Pour mes besoins spécifiques, j'ai besoin de savoir quel appareil j'utilise sans avoir besoin de connaître les détails de la capacité de mise en réseau qui peuvent être facilement récupérés par d'autres moyens. Vous trouverez donc un grain plus grossier
enum
que la liste sans cesse croissante d'appareils.La mise à jour consiste à ajouter le périphérique à l'énumération et à la table de recherche.
UIDevice + NTNUExtensions.h
UIDevice + NTNUExtensions.m
la source
Nom du périphérique et noms de machine, basés sur le matériel du périphérique réel iOS
Ma solution à ce problème est essentiellement liée à la réponse @NicolasMiari dans ce fil. Une classe d'utilitaires distincte a un ensemble prédéfini de noms de périphériques et de machines, puis en fonction du nom réel de la machine, récupérez le nom du périphérique.
Remarque: Cette réponse et son projet GitHub lié ont été mis à jour pour identifier les derniers iPhones actuels (iPhone 8, 8+, X) en octobre 2017. Et cela fonctionne sur iOS11 . Veuillez visiter le dépôt GitHub et voir, et donnez-moi des commentaires si quelque chose ne va pas.
J'ai ajouté cette implémentation et quelques autres méthodes utilitaires pratiques dans une classe et je l'ai mise dans ce référentiel GitHub . Et vous pouvez également trouver la liste des informations sur les appareils à jour dans cette page Wiki .
Veuillez le visiter et l'utiliser.
Mettre à jour:
Vous pouvez avoir besoin d'importer le framework sys,
la source
Compatible avec Swift 3
la source
Cette solution fonctionne pour les appareils physiques et le simulateur iOS de manière à ce que le simulateur renvoie le même modèle que l'appareil physique retournerait pour un modèle, par exemple "iPhone10,6" pour iPhone X (GSM) plutôt que "x86_64".
Définition - Swift 4:
Usage:
la source
la source
La fonction ci-dessous fonctionne parfaitement sur iOS7 ou une version ultérieure dans Swift
la source
Ajoutez un nouveau fichier avec le code suivant et appelez simplement
UIDevice.modelName
Cela comprend tous les modèles publiés jusqu'à la date, y compris la série iPhone 11 et Swift 5.0la source
Pour gagner du temps aux autres. Parce qu'elle est acceptée, la réponse doit être votée propose une bibliothèque qui utilise une API privée et mon application a été rejetée en raison de l'extension uidevice hier! Je passe à la bibliothèque GBDeviceInfo, également installée en tant que pod, pour l'instant elle a l'air agréable, maintenue et mise à jour vers les derniers appareils.
la source
Swift 4 ou version ultérieure
la source
ProcessInfo.processInfo.environment["SIMULATOR_DEVICE_NAME"]
c'est suffisant.Pourquoi ne pas créer une catégorie. N'utilisez pas de problème de fuite de sécurité avec la méthode malloc. Utilisez des fonctions sûres.
Voir les implentations
la source
Si vous avez une liste d'appareils (par exemple maintenue par @Tib ci-dessus dans https://stackoverflow.com/a/17655825/849616 ) pour le gérer si Swift 3 vous utiliseriez:
Plus tard, vous pouvez l'appeler en utilisant
UIDevice.modelName()
.Des crédits supplémentaires vont à @Tib (pour plist), @Aniruddh Joshi (pour
deviceSystemCode()
fonction).la source
Qu'en est-il de l'utilisation d' ideviceinfo pour obtenir ces valeurs? Doit pouvoir l'installer en utilisant
brew install ideviceinfo
Exécutez ensuite:
la source