Zastanawiałem się, czy można ustalić, jakiego rodzaju iPhone'a (na przykład) jest obecne urządzenie? Wiem, że można uzyskać model, przez
NSString *deviceType = [[UIDevice currentDevice] model];
który po prostu wróci, czy mam „iPhone”, czy „iPod”, ALE zastanawiałem się, czy można wykryć / wiedzieć, czy mam iPhone 3GS vs. i iPhone 4 vs. iPhone 4S (w rzeczywistości wszystko, co naprawdę chcę zrobić, to ustalić, czy mam 3G, czy nie, ponieważ robię dość intensywne prace graficzne) .
Więc tak, daj mi znać, dziękuję!
ios
objective-c
iphone
ipad
Nathan Fraenkel
źródło
źródło
Odpowiedzi:
JEDNAK wypróbuj tę bibliotekę: http://github.com/erica/uidevice-extension/ (autor: Erica Sadun). (Biblioteka ma 7-8 lat i dlatego jest przestarzała)
(Przykładowy kod):
LUB Możesz użyć tej metody:
Numer modelu urządzenia można uzyskać za pomocą uname z sys / utsname.h. Na przykład:
Cel C
Szybki 3
Wynik powinien być:
źródło
Rozwijając powyższą odpowiedź OhhMee, dodałem pewne zabezpieczenie przed awarią, aby obsługiwać przyszłe urządzenia niewymienione (jeszcze) na liście:
Pominąłem również szczegółowe informacje (np. „Model A1507, A1516, A1526 (Chiny), A1529 | Global”) i zamiast tego umieściłem je w komentarzach, na wypadek, gdybyś chciał użyć ich jako ciągów skierowanych do użytkownika i nie wystraszyć ich.
Edycja: Ta odpowiedź zapewnia podobną implementację przy użyciu Swift 2.
Edycja 2: Właśnie dodałem modele iPada Pro (oba rozmiary). W celu późniejszego wykorzystania numery modeli / itp. można znaleźć na Wiki Wiki .
Edycja 3: Dodaj obsługę iPhone'a XS, iPhone'a XS Max i iPhone'a XR.
Edycja 4: Dodaj obsługę iPhone'a 11, iPhone'a 11 Pro i iPhone'a 11 Pro Max.
źródło
deviceName
, kiedy zamierzałem wyszukiwaćcode
. Ktoś zasugerował zmianę, ale nie mogłem jej zatwierdzić, zanim inne osoby ją odrzuciły, więc sam poprawiłem odpowiedź. Dzięki temu, kto to zasugerował.Zrobiłem plik plist, aby pomóc ci uzyskać pełną nazwę dla każdego urządzenia (kod źródłowy na końcu mojej odpowiedzi)
Na podstawie odpowiedzi OhhMee możesz użyć jej w następujący sposób:
Swift 4.0
Nie zapomnij dodać
#import <sys/utsname.h>
nagłówka pomostowego.Cel C
Plik Plist:
źródło
[[UIDevice currentDevice] model]
właśnie wracaiPhone
lubiPod
nie dostajesz numerów modelu, które pozwoliłyby ci rozróżnić różne generacje urządzeń.Koduj tę metodę:
I wywołaj metodę
[self getModel]
ilekroć potrzebujesz modelu, a otrzymasz: „iPhone5,1” dla absurdalnie cienkiego i szybkiego iPhone'a 5.Jedną dobrą praktyką jest utworzenie klasy o nazwie
Utils.h/Utils.m
i umieszczenie takich metod,getModel
aby można było uzyskać te informacje z dowolnego miejsca w aplikacji, po prostu importując klasę i wywołując[Utils getModel];
źródło
Zoptymalizowałem implementację NicolasMiari i dodałem
Simulator
tutaj:``
źródło
Poniżej znajduje się kod do tego ( kod może nie zawierać całego ciągu urządzenia, jestem z innymi facetami utrzymującymi ten sam kod na GitHub, więc proszę wziąć najnowszy kod stamtąd )
Cel C : GitHub / DeviceUtil
Swift : GitHub / DeviceGuru
źródło
Kategoria ucieczki od opisu NSString
Zasadniczo pożądane jest unikanie arbitralnych porównań ciągów w całym kodzie. Lepiej jest zaktualizować ciągi w jednym miejscu i ukryć magiczny ciąg przed aplikacją. W
UIDevice
tym celu podaję kategorię.Ze względu na moje specyficzne potrzeby muszę wiedzieć, z którego urządzenia korzystam, bez potrzeby znajomości możliwości sieciowych, które można łatwo odzyskać na inne sposoby. Znajdziesz więc grubszą, ziarnistą
enum
niż stale rosnącą listę urządzeń.Aktualizacja polega na dodaniu urządzenia do wyliczenia i tabeli odnośników.
UIDevice + NTNUExtension.h
UIDevice + NTNUExtensions.m
źródło
Nazwa urządzenia i nazwy komputera, na podstawie sprzętu Real Device iOS
Moje rozwiązanie tego problemu jest w zasadzie związane z odpowiedzią @NicolasMiari w tym wątku. Oddzielna klasa narzędzi ma wstępnie zdefiniowany zestaw nazw urządzeń i komputerów, a następnie w zależności od rzeczywistej nazwy komputera pobierz nazwę urządzenia.
Uwaga: Ta odpowiedź i powiązany z nią projekt GitHub zostały zaktualizowane w celu identyfikacji aktualnych najnowszych iPhone'ów (iPhone 8, 8+, X) od października 2017 r. I to działa również na iOS11 . Proszę odwiedzić repozytorium GitHub i zobaczyć i przekazać mi informację zwrotną, jeśli coś jest nie tak.
Dodałem tę implementację i kilka innych wygodnych metod narzędziowych w klasie i umieściłem ją w tym repozytorium GitHub . A także można znaleźć aktualną listę informacji o urządzeniu na tej stronie Wiki .
Odwiedź go i skorzystaj z niego.
Aktualizacja:
Może być konieczne zaimportowanie frameworka sys,
źródło
Kompatybilny z Swift 3
źródło
To rozwiązanie działa zarówno na urządzeniach fizycznych, jak i na symulatorze iOS w taki sposób, że symulator zwraca ten sam model, co urządzenie fizyczne zwraca model, np. „IPhone10,6” dla iPhone X (GSM) zamiast „x86_64”.
Definicja - Swift 4:
Stosowanie:
źródło
źródło
Poniżej funkcji Idealnie działa na iOS7 lub nowszej wersji w Swift
źródło
Dodaj nowy plik z następującym kodem i po prostu zadzwoń.
UIDevice.modelName
Obejmuje to wszystkie modele wydane do tej pory, w tym iPhone'a 11 i Swift 5.0źródło
Zaoszczędź czas innym. Ponieważ zaakceptowano, musi głosować odpowiedź zaproponować bibliotekę, która korzysta z prywatnego interfejsu API, a moja aplikacja została odrzucona z powodu rozszerzenia uidevice jeszcze wczoraj! Przechodzę do biblioteki GBDeviceInfo, również zainstalowanej jako kapsuła, na razie wygląda ładnie, jest utrzymywana i aktualizowana do najnowszych urządzeń.
źródło
Swift 4 lub nowszy
źródło
ProcessInfo.processInfo.environment["SIMULATOR_DEVICE_NAME"]
wystarczy.Dlaczego nie stworzyć kategorii. Nie używaj problemu z przeciekami bezpieczeństwa metody Malloc. Używaj bezpiecznych funkcji.
Zobacz implanty
źródło
Jeśli masz wiele urządzeń (np. Utrzymywanych przez @Tib powyżej w https://stackoverflow.com/a/17655825/849616 ) do obsługi, jeśli korzystasz z Swift 3:
Później możesz to nazwać za pomocą
UIDevice.modelName()
.Dodatkowe kredyty trafiają do @Tib (dla plist), @Aniruddh Joshi (dla
deviceSystemCode()
funkcji).źródło
Co z użyciem ideviceinfo, aby uzyskać te wartości? Powinien być w stanie zainstalować go za pomocą
brew install ideviceinfo
Następnie uruchomić:
źródło