Preparing for iOS 9
iOS 9 is releasing next week, and with it comes some changes and bugs that Ionic developers need to be aware of. Even if your app was published for an earlier version of iOS, you might still need to make some fixes due to regressions released by Apple in the web browser.
Apple sent out an email last night (Friday 9/11/2015) encouraging developers to test and submit their apps NOW to make sure they are out in time for iOS 9 release next week: “To prepare, build your apps using Xcode 7 GM seed, and test with the GM seeds of iOS 9. Read the App Review Guidelines and use TestFlight to get feedback before submitting to the App Store.”
This would seem to indicate there’s time to make the iOS 9 roll out if you test, fix, and submit ASAP.
window.location bug
UIWebView
, where Ionic, Cordova, and web content historically ran, introduced a regression with the way window.location
works. Basically, the value doesn’t properly update synchronously anymore.
The impact of this is that Angular’s browser location detection behaves in unpredictable ways, which bubbles up through UI-Router and impacts Ionic.
There is a fix that must be applied in your Angular/Ionic app. Please read my post and use the patch created by Igor from the Angular team found in it.
Also, empty href links <a href="#">
will trigger your otherwise
state, so test those and remove the empty href if necessary.
Radio button issue
UIWebView
broke how tilde CSS selectors work. The impact of this change is probably quite widespread on the web, but has manifested itself in an Ionic bug with radio buttons. We’ve removed the need for the tilde selector and the issue is resolved.
To fix, add the new ion-radio-fix
directive and corresponding CSS from this gist. Make sure to change any reference to <ion-radio>
to <ion-radio-fix>
.
Note: this fix is now in Ionic master. So, if you’re feeling adventurous, you could alternatively use a new release of Ionic to avoid having to apply the radio patch.
App Transport Security
iOS 9 introduces a new security feature that blocks non-HTTPS traffic in your app. However, this is a new feature that is only enabled for apps building with X Code 7 and iOS 9 SDK today. It will not break existing apps.
Since the changes above require recompilation, this will impact your development process and manfiest itself as a breaking change.
To fix, edit the MyApp-Info.plist
file and add the contents of this patch.
Conclusion
iOS 9 introduces a number of new features, but also several regressions in the supplied UIWebView
browser. These issues are not present in iOS Safari, so mobile websites built with Ionic will not break. They are also not present in WKWebView
, the new web view environment in iOS.
There is some good news here: Cordova will soon support WKWebView
on iOS, which will bring some great performance and feature improvements to Cordova and Ionic apps. We will move to this new feature as soon as it’s ready, and we hope that will happen some time this fall.
Thank you to everyone who helped isolate and fix these issues. It always sucks when breaking changes happen, and going forward we are going to tighten up our OS release testing process to make sure we catch these regressions early and also assume that regressions introduced in iOS betas will not be fixed in time for the GM releases. Unfortunately, we assumed these glaring bugs would be fixed in time but they were not.