Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Neue Features im iOS-SDK - wie ältere Versionen weiterhin unterstützen

Felix Schulze
September 03, 2013

Neue Features im iOS-SDK - wie ältere Versionen weiterhin unterstützen

Vielen kommt das Problem bekannt vor: Die gerade eben neu veröffentlichte iOS-Version enthält zahlreiche neue Features und Änderungen, jedoch müssen häufig ältere iOS-Versionen ebenfalls unterstützt werden. Der Vortrag soll die Möglichkeiten zur Unterstützung von älteren iOS-Versionen erläutern und Frameworks, Erfahrungen und Best Practices darstellen.

Felix Schulze

September 03, 2013
Tweet

More Decks by Felix Schulze

Other Decks in Technology

Transcript

  1. Felix Schulze | AutoScout24 GmbH Neue Features im iOS-SDK -

    wie ältere Versionen weiterhin unterstützen
  2. Probleme •  Frameworks fehlen •  API Änderungen •  Bugs • 

    Xcode Deployment Target •  Naming Convention •  Konzeptionelle Änderungen •  Design Änderungen •  Hardware Änderungen
  3. Steps for Success 1.  Ermitteln welche Versionen unterstützt werden sollen

    2.  Aktuelles iOS unterstützen 3.  Testen mit dieser Version 1.  Ggf. Minor Versionen testen 4.  Unterstützung alter Versionen einbauen 5.  Testen mit aktueller + alten Versionen
  4. Testing bei AutoScout24 •  Automatische Tests: – Immer neuste Version des

    SDK‘s •  Manuelle Tests: – Neuste Version – Unterstütze Versionen: •  Major •  Minor per Zufall
  5. Testing bei AutoScout24 Model iOS 5.x iOS 6.0.X iOS 6.1.X

    iPhone 3GS X X X iPhone 4 X X X iPhone 4S X iPhone 5 X •  Und was ist mit Minor Versionen? •  Und was ist mit dem iPod Touch? •  Wie kommt man an alte Versionen / Geräte? Entwickler: Immer neuste iOS Version! Testing:
  6. Neue Frameworks iOS 6.0 •  PassKit.framework •  Social.framework •  MediaToolbox.framework

    •  (VideoToolbox.framework) •  Liste aller Frameworks: http://goo.gl/10eciz
  7. Framework Änderungen iOS 6.0 •  84 Seiten API Änderungen http://goo.gl/YIHI9m

    •  Beispiele: –  Added: UICollectionView! –  Added: UIActivityViewController! –  Added: [UIBarButtonItem setBackgroundImage:forState: 
 style:barMetrics:]!
  8. Einstellungen •  Base SDK – SDK zum Bauen der App – Empfehlung:

    Immer neuste Version •  Deployment Target – Minimal unterstützte Version – Ab Xcode 4.5: Nur >= iOS 4.3
  9. Einstellungen •  Valid architectures §  armv6 - iPhone 2G/3G, iPod

    1G/2G §  armv7 - iPhone 3GS, iPhone 4, iPhone 4S, iPod 3G/4G/5G, iPad, iPad 2, iPad 3, iPad Mini §  armv7s - iPhone 5, iPad 4 •  Ab Xcode 4.5 – nur armv7/armv7s
  10. Simulator •  iOS 5.0 •  iOS 5.1 •  iOS 6.0

    •  iOS 6.1 •  Ältere Versionen nur über Hack: goo.gl/V1T5rx
  11. Hardware Restriktionen •  UIRequiredDeviceCapabilities – Benötigte Features des Gerätes festlegen – Restriktiv

    •  Key-Value Plist •  True: Gerät benötigt dieses Feature •  False: Gerät darf dieses Feature nicht haben •  Weglassen: Feature ist egal •  z.B. telephony, sms, wifi, auto-focus-camer, gyroscope, gps
  12. Unterscheidungen im Code •  Überprüfung ob Funktion vorhanden if ([button

    respondsToSelector:@selector (setBackButtonBackgroundImage:forState:barMetrics:)]) 
 { !! !// vorhanden! } 
 else ! { ! !//nicht vorhanden! }
  13. Probleme •  z.B. MapKit – Bereits vorher vorhanden (private) 
 Class

    itemClass = NSClassFromString(@“MKMapItem“);! if (itemClass) ! {! !// FEHLER: Unter iOS <6.0 nicht vorhanden! }! if (itemClass && [itemClass respondsToSelector: 
 @selector(openMapsWithItems:launchOptions:)]) ! {! !// vorhanden! }!
  14. Unterscheidungen im Code •  iOS Version ermitteln if (floor(NSFoundationVersionNumber) !

    !<= NSFoundationVersionNumber_iOS_5_1) ! { ! !// iOS 5.1 oder älter! } 
 else ! { ! !// iOS 6.0 oder neuer! }!
  15. Deprecation, Available •  __attribute__ ((deprecated))! •  __deprecated! •  NSObjCRuntime.h! • 

    NS_DEPRECATED_IOS(4_0,5_0);! •  NS_AVAILABLE_IOS(6_0);! •  NS_ENUM_AVAILABLE_IOS(6_0);! •  DEPRECATED_ATTRIBUTE!
  16. Beispiele •  UICollectionView – Ab iOS 6.0 – PSTCollectionView ab iOS 4.3

    •  Open Source •  https://github.com/steipete/PSTCollectionView •  Switch auf Original ab iOS 6.0
  17. Beispiele •  UIRefreshControl – Ab iOS 6.0 – ODRefreshControl ab iOS 4.3

    •  Open Source •  https://github.com/Sephiroth87/ODRefreshControl •  Eigener Wrapper
  18. Beispiele •  UIActivityViewController – Ab iOS 6.0 – REActivityViewController ab iOS 5.0

    •  Open Source •  https://github.com/romaonthego/ REActivityViewController •  Eigener Wrapper
  19. Beispiele •  Social Framework – Ab iOS 6.0 – Eigener Wrapper für

    iOS 5.0 – Facebook SDK für iOS 4.3 – Twitter SDK für iOS 4.3
  20. Tools •  CocoaControls für Dependencies – Kapselung von Xcode Einstellungen – Kapselung

    von Framwork Linking – Übersichtlichkeit •  AppCode •  Deploymate •  www.cocoacontrols.com
  21. Tipps & Tricks •  Naming Convention: –  Klassen: 3 Buchstaben

    z.B. ASC à AutoScout24 –  Categories: Prefix z.B. asc_foo() à AutoScout24 •  Open Source Frameworks verwenden •  Wrapper für Frameworks bauen •  Tools verwenden •  Testen, Testen, Testen
  22. Deployment Target < 4.3 •  Xcode 4.5 + Xcode 4.3

    •  Universal Binary für armv6, armv7, armv7s •  iOS 6 Features mit #ifdef ! •  Anleitung: http://goo.gl/8wajjt