Rozpoznawanie typu iPhone’a i wersji systemu

Zaprezentuje poniżej proste porównania umożliwiające rozpoznawanie wersji systemu i/lub urządzenia na jakim uruchomiona jest aplikacja. W tym celu skorzystałem z kilku rozsianych informacji, które połączyłem w łatwe warunki. Dla łatwiejszej pracy na początku zdefiniowałem parę makr w pliku Aplikacja-Prefix.pch:

#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0f)
#define IS_RETINA ([[UIScreen mainScreen] scale] == 2.0f)

Ostatnie z nich nie jest wymagane ale czasem może się przydać. Teraz posiadając dostęp w każdym miejscu aplikacji do tych makr, możemy uzależnić działanie aplikacji np. załadowanie obrazka w zależności od urządzenia i lub systemu. I tak możemy dla przykładu dokonać takiego sprawdzenia:

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
 // zasoby dla wersji ponizej 7.0
 if(IS_IPHONE_5) {
 // ios 7 + iPhone 5
 [background
    setImage:[UIImage
           imageNamed:@"background-iphone-5-ios-6.1.png"]];
 } else {
 // ios 7 + iPhone 4/4s
 [background
    setImage:[UIImage
           imageNamed:@"background-iphone-4-ios-6.1.png"]];
 }
} else {
 // ios <= 6.1
 if(IS_IPHONE_5) {
 // ios <= 6.1 + iPhone 5
 [background
    setImage:[UIImage
           imageNamed:@"background-iphone-5-ios-7.png"]];
 } else {
 // ios <= 6.1 + iPhone 4/4s
 [background
    setImage:[UIImage
           imageNamed:@"background-iphone-4-ios-7.png"]];
 }
}

Sprawdzenie główne sprawdza na jakiej wersji systemu mamy uruchomioną aplikację. Natomiast wewnętrzne sprawdzenia przekazują informacje o tym czy program uruchomiony jest na iPhonie 5, 5S czy na starszym mniejszym modelu. Można także precyzyjniej rozpoznawać wersje systemu korzystając ze stałych zdefiniowanych w SDK:

#define NSFoundationVersionNumber_iPhoneOS_2_0 678.24
#define NSFoundationVersionNumber_iPhoneOS_2_1 678.26
#define NSFoundationVersionNumber_iPhoneOS_2_2 678.29
#define NSFoundationVersionNumber_iPhoneOS_3_0 678.47
#define NSFoundationVersionNumber_iPhoneOS_3_1 678.51
#define NSFoundationVersionNumber_iPhoneOS_3_2 678.60
#define NSFoundationVersionNumber_iOS_4_0 751.32
#define NSFoundationVersionNumber_iOS_4_1 751.37
#define NSFoundationVersionNumber_iOS_4_2 751.49
#define NSFoundationVersionNumber_iOS_4_3 751.49
#define NSFoundationVersionNumber_iOS_5_0 881.00
#define NSFoundationVersionNumber_iOS_5_1 890.10
#define NSFoundationVersionNumber_iOS_6_0 993.00
#define NSFoundationVersionNumber_iOS_6_1 993.00

Świat Apple zmienia się bardzo dynamicznie. Kilka razy do roku pojawiają się albo nowe systemy albo urządzenia, które powiększają gamę urządzeń do testowania i możliwych kombinacji. Tym samym kod obsługujący duży zakres urządzeń jest co raz bardziej skomplikowany. Na szczęście pokrycie rynku telefonami z zainstalowanym iOS 7 wynosi już ponad 70% zgodnie z artykułem na macrumors.com, więc obsługę iOS6 pewnie będzie można za jakiś czas usunąć :)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *