iOS9-Fehler: Neues Update verursacht Probleme bei Web-& Hybrid-Apps – Lösungsansätze

Am 16. September ist es soweit und die neuste Version des mobilen Betriebssystems von Apple mit dem Namen iOS9 wird an die Endnutzer verteilt. Jedoch zeichnen sich beim Test der Beta ein paar Probleme für die Entwicklung von Web-Apps, mobile Websites und hybrider Anwendung, insbesondere mit AngularJS und Ionic, ab.

Der window.location Bug

Mit dem iOS-Update erhalten die Geräte auch die neue Version der WebView (UIWebView), in der hybride Apps ausgeführt werden. Hier hat sich jedoch die Art und Weise geändert, wie sich das window.location verhält. Standardmäßig erhält der Entwickler darüber Zugriff auf die URI der aktuell angezeigten Webseite. Dies setzt aber voraus, dass sich mit jedem Seitenwechsel der Wert dazu ändert. Darauf baut auch der Routing-Mechanismus AngularJS und somit auch das Ionic Framework. In der aktuellen UIWebView scheint das Setzen der aktuellen URI nicht synchron zu passieren, sodass auch das Seitenwechseln (State-Wechseln) in den Apps nicht richtig Funktioniert.

Glücklicherweise hat der Entwickler Igor Mina schnell reagiert und in seinem GitHub-Account einen temporären Fix für AngularJS veröffentlicht.
AngularJS iOS 9 window.location Fix
Dabei handelt es sich um ein eigenständiges Angular-Modul, welches in die eigene Anwendung eingebunden werden muss.

angular.module('meineApp', ['ionic', 'ngIOS9UIWebViewPatch']);

Ein zusätzliches Problem ist, dass alle leeren Links (href=”” oder href=”#”) automatisch auf die Fallback-Route der Anwendung leiten (urlRouterProvider.otherwise(‘/index’);). Aus diesem Grund sollten diese entfernt werden.

Tilde CSS-Selektor

In der neuen WebView wird auch der CSS Tilde-Selektor (~) anders interpretiert, was weitreichende Folgen für viele Webseiten und Apps haben wird. Auch Ionic ist davon betroffen. Im Speziellen ist das Styling des Radio-Buttons kaputt. Aber auch da hat das Ionic-Team schnell reagiert und eine Lösung bereitgestellt. In den aktuellsten Nightly-Builds des Frameworks ist der Fix bereits enthalten. In allen anderen Fällen kann das Ionic-Modul manuell erweitert werden. Danach müssen alle ionRadio-Buttons durch ionRadioFix-Buttons ersetzt werden.
Ionic ionRadio Fix

Nicht-HTTPS Anfragen werden blockiert

Alle Anwendungen, die mit X Code 7 und dem iOS 9 SDK gebaut werden, erhalten automatisch ein neues Sicherheits-Feature, welches jeglichen nicht-HTTPS-Verkehr blockiert. Um dies zu umgehen, muss die [AppName]-Info.plist angepasst werden, welche im Ionic/Cordova-Projekt unter “platforms/ios/[AppName]” gefunden werden kann.

<!--
This disables app transport security and allows non-HTTPS requests.
Note: it is not recommended to use non-HTTPS requests for sensitive data. A better
approach is to fix the non-secure resources. However, this patch will work in a pinch.
To apply the fix in your Ionic/Cordova app, edit the file located here:
platforms/ios/MyApp/MyApp-Info.plist
And add this XML right before the end of the file inside of the last </dict> entry:
   
    PASTE HERE
  </dict>
</plist>
-->
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>

Diese Lösung stammt vom Ionic-Entwickler Max Lynch.

Fazit

Es wird wieder mal deutlich, dass auch Software-Riesen nicht nur kleine Fehler begehen. Für den window.location-Bug soll auf Seiten von Apple schon an einer Lösung gearbeitet werden. Wann und wie schnell alle Probleme beseitig sind, kann noch nicht genau gesagt werden.