2011-11-07 9 views
8

Muszę odróżnić iPhone 4S od iPhone 4. Przeszedłem przez posty i otrzymałem następujący kod. Proszę dać mi znać, jeśli jest to jedyny sposób, aby to zrobić i potwierdzić, że nie ma problemu z Apple, jeśli jest używany.Rozróżnianie iPhone'a 4 i iPhone'a 4S

  struct utsname systemInfo; 
      uname(&systemInfo); 
      NSString *iPhoneVersion = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; 

Dla 4S, iPhoneVersion ciąg da mi iPhone4,1 i iPhone 4 powie iPhone3,1.

Dzięki za sugestie.

+0

możliwy duplikat [Jak sprawdzić, czy twój kod działa na iPhonie lub iPhonie3G?] (Http://stackoverflow.com/questions/688001/how-to-tell-if-your-code-is- running-on-an-iphone-or-an-iphone3g) –

+2

Czy mogę zapytać dlaczego? –

Odpowiedz

6

iPhone 4 może również nazywać się iPhone3,3 w przypadku modelu CDMA (here is a not-quite-up-to-date list). Ogólnie rzecz biorąc, jest o wiele bezpieczniejsze i "kompatybilne z przyszłością", aby przetestować możliwości platformy (na przykład [someSystemClass respondsToSelector:@selector(someMethodName)] lub podobne) zamiast ręcznie określać możliwości w oparciu o model urządzenia. Czy możesz powiedzieć, dlaczego musisz rozróżniać iPhone 4 i 4S?

+0

Jednym z powodów, dla których mógłbym myśleć, że OP będzie chciał, jest raportowanie statystyk użytkowania na urządzenie. – jbrennan

+2

Jeśli zgłaszasz statystyki użytkowania, znacznie lepiej jest po prostu użyć wartości nieprzetworzonej typu sprzętu, a następnie posortować ją na serwerze, który jest raportowany. Wtedy nie musisz aktualizować swojej aplikacji za każdym razem, gdy Apple wprowadza nowy sprzęt. –

+0

@Martin: Chcę wyświetlić rozdzielczości zdjęć, oryginalne i średnie dla urządzeń iPhone. Używając metody [[UIScreen mainScreen]], mogę oddzielić 3GS od iPhone'a 4. – Sana

5

Jak sugerowali inni, zamiast wybierać dla konkretnego urządzenia (które ulegnie zniszczeniu, jeśli i kiedy Apple rozleje wariacje lub następny model), należy skupić się na tym, jakich funkcji potrzebujesz. Prawie jedyne aplikacje iPhone'a, które złamały się po uruchomieniu iPada, to te, które wykryły model sprzętu, ponieważ nie miały pojęcia, że ​​iPad się zbliża, a tym samym nie mógł znaleźć tego konkretnego identyfikatora urządzenia.

Jeśli aplikacja absolutnie nie można uruchomić na iPhone 4, ze względu na specyficzne wymagania sprzętowe, takich jak Bluetooth 4.0 Low wsparcie Power byłbyś najlepiej służy, aby dodać bluetooth-le do swojej UIRequiredDeviceCapabilities w Info.plist, jak opiszę here . To uniemożliwi użytkownikom nawet instalowanie aplikacji na urządzeniach innych niż 4S, ale pozostawia to otwartą możliwość działania dla przyszłych iPhone'ów, które najprawdopodobniej będą miały sprzęt Bluetooth o niskim poborze mocy.

Jeśli chcesz skalować możliwości sprzętowe, aby skorzystać z A5, możesz sprawdzić, czy obsługuje niektóre z nowych rozszerzeń OpenGL ES, które posiada A5, za pomocą glGetString(GL_EXTENSIONS) i sprawdzając rozszerzenia, takie jak APPLE_shadow_samplers. Rozszerzenia te nie występują na A4, ale są tam na A5 i powinny tam być przez kilka kolejnych iteracji sprzętu Apple.

Możliwe, że będziesz mógł również użyć lekko udokumentowanego nowego szkieletu Core Bluetooth, aby przetestować obecność sprzętu 4.0 Low Power w urządzeniu podczas pracy, ale nie spędziłem z nim zbyt wiele czasu.

Powiązane problemy