{"id":614,"date":"2015-09-12T16:00:44","date_gmt":"2015-09-12T16:00:44","guid":{"rendered":"https:\/\/ionic.io\/blog\/?p=614"},"modified":"2017-01-09T06:46:24","modified_gmt":"2017-01-09T06:46:24","slug":"preparing-for-ios-9","status":"publish","type":"post","link":"https:\/\/ionic.io\/blog\/preparing-for-ios-9","title":{"rendered":"Preparing for iOS 9"},"content":{"rendered":"<p>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.<\/p>\n<p>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: &#8220;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.&#8221;<\/p>\n<p>This would seem to indicate there&#8217;s time to make the iOS 9 roll out if you test, fix, and submit ASAP.<br \/>\n<!--more--><\/p>\n<h3>window.location bug<\/h3>\n<p><code>UIWebView<\/code>, where Ionic, Cordova, and web content historically ran, introduced a regression with the way <code>window.location<\/code> works. Basically, the value doesn&#8217;t properly update synchronously anymore.<\/p>\n<p>The impact of this is that Angular&#8217;s browser location detection behaves in unpredictable ways, which bubbles up through UI-Router and impacts Ionic.<\/p>\n<p>There is a fix that <em>must<\/em> be applied in your Angular\/Ionic app. Please <a href=\"https:\/\/ionic.io\/blog\/ios-9-potential-breaking-change\/\">read my post<\/a> and use the patch created by Igor from the Angular team found in it.<\/p>\n<p>Also, empty href links <code>&lt;a href=&quot;#&quot;&gt;<\/code> will trigger your <code>otherwise<\/code> state, so test those and remove the empty href if necessary.<\/p>\n<h3>Radio button issue<\/h3>\n<p><code>UIWebView<\/code> 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&#8217;ve removed the need for the tilde selector and the issue is resolved.<\/p>\n<p>To fix, add the new <code>ion-radio-fix<\/code> directive and corresponding CSS from <a href=\"https:\/\/gist.github.com\/mlynch\/064d27912b511a63caa3\">this gist<\/a>. Make sure to change any reference to <code>&lt;ion-radio&gt;<\/code> to <code>&lt;ion-radio-fix&gt;<\/code>.<\/p>\n<p>Note: this fix is now <a href=\"https:\/\/github.com\/driftyco\/ionic\">in Ionic master<\/a>. So, if you&#8217;re feeling adventurous, you could alternatively use a new release of Ionic to avoid having to apply the radio patch.<\/p>\n<h3>App Transport Security<\/h3>\n<p>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 <em>will not<\/em> break existing apps.<\/p>\n<p>Since the changes above require recompilation, this will impact your development process and manfiest itself as a breaking change.<\/p>\n<p>To fix, edit the <code>MyApp-Info.plist<\/code> file and add the contents of <a href=\"https:\/\/gist.github.com\/mlynch\/284699d676fe9ed0abfa\">this patch<\/a>.<\/p>\n<h3>Conclusion<\/h3>\n<p>iOS 9 introduces a number of new features, but also several regressions in the supplied <code>UIWebView<\/code> browser. These issues are not present in iOS Safari, so mobile websites built with Ionic will not break. They are also not present in <code>WKWebView<\/code>, the new web view environment in iOS.<\/p>\n<p>There is some good news here: Cordova will soon support <code>WKWebView<\/code> 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&#8217;s ready, and we hope that will happen some time this fall.<\/p>\n<p>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.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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 [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"publish_to_discourse":"","publish_post_category":"","wpdc_auto_publish_overridden":"","wpdc_topic_tags":"","wpdc_pin_topic":"","wpdc_pin_until":"","discourse_post_id":"","discourse_permalink":"","wpdc_publishing_response":"","wpdc_publishing_error":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[3],"class_list":["post-614","post","type-post","status-publish","format-standard","hentry","category-all","tag-ionic"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.0 (Yoast SEO v23.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Preparing for iOS 9 - Ionic Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ionic.io\/blog\/preparing-for-ios-9\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Preparing for iOS 9\" \/>\n<meta property=\"og:description\" content=\"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 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ionic.io\/blog\/preparing-for-ios-9\" \/>\n<meta property=\"og:site_name\" content=\"Ionic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-09-12T16:00:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-01-09T06:46:24+00:00\" \/>\n<meta name=\"author\" content=\"Max Lynch\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@maxlynch\" \/>\n<meta name=\"twitter:site\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Max Lynch\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ionic.io\/blog\/preparing-for-ios-9#article\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/preparing-for-ios-9\"},\"author\":{\"name\":\"Max Lynch\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/91f360cffbd804a464b0c4a87b5c5f1e\"},\"headline\":\"Preparing for iOS 9\",\"datePublished\":\"2015-09-12T16:00:44+00:00\",\"dateModified\":\"2017-01-09T06:46:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/preparing-for-ios-9\"},\"wordCount\":577,\"commentCount\":22,\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"keywords\":[\"Ionic\"],\"articleSection\":[\"All\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ionic.io\/blog\/preparing-for-ios-9#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ionic.io\/blog\/preparing-for-ios-9\",\"url\":\"https:\/\/ionic.io\/blog\/preparing-for-ios-9\",\"name\":\"Preparing for iOS 9 - Ionic Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/#website\"},\"datePublished\":\"2015-09-12T16:00:44+00:00\",\"dateModified\":\"2017-01-09T06:46:24+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/ionic.io\/blog\/preparing-for-ios-9#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ionic.io\/blog\/preparing-for-ios-9\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ionic.io\/blog\/preparing-for-ios-9#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ionic.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Preparing for iOS 9\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ionic.io\/blog\/#website\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"name\":\"ionic.io\/blog\",\"description\":\"Build amazing native and progressive web apps with the web\",\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ionic.io\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/ionic.io\/blog\/#organization\",\"name\":\"Ionic\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"width\":1920,\"height\":854,\"caption\":\"Ionic\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/ionicframework\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/91f360cffbd804a464b0c4a87b5c5f1e\",\"name\":\"Max Lynch\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/05\/max-avatar-150x150.jpg\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/05\/max-avatar-150x150.jpg\",\"caption\":\"Max Lynch\"},\"description\":\"CEO\",\"sameAs\":[\"http:\/\/twitter.com\/maxlynch\",\"https:\/\/x.com\/maxlynch\"],\"url\":\"https:\/\/ionic.io\/blog\/author\/max\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Preparing for iOS 9 - Ionic Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ionic.io\/blog\/preparing-for-ios-9","og_locale":"en_US","og_type":"article","og_title":"Preparing for iOS 9","og_description":"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 [&hellip;]","og_url":"https:\/\/ionic.io\/blog\/preparing-for-ios-9","og_site_name":"Ionic Blog","article_published_time":"2015-09-12T16:00:44+00:00","article_modified_time":"2017-01-09T06:46:24+00:00","author":"Max Lynch","twitter_card":"summary_large_image","twitter_creator":"@maxlynch","twitter_site":"@ionicframework","twitter_misc":{"Written by":"Max Lynch","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ionic.io\/blog\/preparing-for-ios-9#article","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/preparing-for-ios-9"},"author":{"name":"Max Lynch","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/91f360cffbd804a464b0c4a87b5c5f1e"},"headline":"Preparing for iOS 9","datePublished":"2015-09-12T16:00:44+00:00","dateModified":"2017-01-09T06:46:24+00:00","mainEntityOfPage":{"@id":"https:\/\/ionic.io\/blog\/preparing-for-ios-9"},"wordCount":577,"commentCount":22,"publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"keywords":["Ionic"],"articleSection":["All"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ionic.io\/blog\/preparing-for-ios-9#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ionic.io\/blog\/preparing-for-ios-9","url":"https:\/\/ionic.io\/blog\/preparing-for-ios-9","name":"Preparing for iOS 9 - Ionic Blog","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/#website"},"datePublished":"2015-09-12T16:00:44+00:00","dateModified":"2017-01-09T06:46:24+00:00","breadcrumb":{"@id":"https:\/\/ionic.io\/blog\/preparing-for-ios-9#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ionic.io\/blog\/preparing-for-ios-9"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/ionic.io\/blog\/preparing-for-ios-9#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ionic.io\/blog"},{"@type":"ListItem","position":2,"name":"Preparing for iOS 9"}]},{"@type":"WebSite","@id":"https:\/\/ionic.io\/blog\/#website","url":"https:\/\/ionic.io\/blog\/","name":"ionic.io\/blog","description":"Build amazing native and progressive web apps with the web","publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ionic.io\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ionic.io\/blog\/#organization","name":"Ionic","url":"https:\/\/ionic.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","width":1920,"height":854,"caption":"Ionic"},"image":{"@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/ionicframework"]},{"@type":"Person","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/91f360cffbd804a464b0c4a87b5c5f1e","name":"Max Lynch","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/05\/max-avatar-150x150.jpg","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/05\/max-avatar-150x150.jpg","caption":"Max Lynch"},"description":"CEO","sameAs":["http:\/\/twitter.com\/maxlynch","https:\/\/x.com\/maxlynch"],"url":"https:\/\/ionic.io\/blog\/author\/max"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/614","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/comments?post=614"}],"version-history":[{"count":0,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/614\/revisions"}],"wp:attachment":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media?parent=614"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/categories?post=614"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/tags?post=614"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}