{"id":1525,"date":"2016-11-22T15:43:12","date_gmt":"2016-11-22T15:43:12","guid":{"rendered":"https:\/\/ionic.io\/blog\/?p=1525"},"modified":"2016-12-09T16:14:42","modified_gmt":"2016-12-09T16:14:42","slug":"rc3-error-reporting-final-oh-my","status":"publish","type":"post","link":"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my","title":{"rendered":"RC3, Error Reporting, Final, Oh My!"},"content":{"rendered":"<p>Howdy, folks! I just wanted to share a few updates on things and talk about an amazing new feature in the Ionic build process.<\/p>\n<h3>Framework Updates<\/h3>\n<p>RC3 has shipped ? ! We\u2019ve been hard at work closing issues and improving the performance of our components. Three components in particular\u2014Menu, Sliding Items, and DateTime\u2014have had significant work done to improve their performance. For example, here are before and after shots of Menu from the developer tools:<\/p>\n<p>Before<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/cloud.githubusercontent.com\/assets\/127379\/19913327\/ed1047fe-a0a1-11e6-9edb-f37eb5aa673b.png\" alt=\"before\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" \/><noscript><img decoding=\"async\" src=\"https:\/\/cloud.githubusercontent.com\/assets\/127379\/19913327\/ed1047fe-a0a1-11e6-9edb-f37eb5aa673b.png\" alt=\"before\" \/><\/noscript><\/p>\n<p>After<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/cloud.githubusercontent.com\/assets\/127379\/19913328\/ed111d32-a0a1-11e6-8ba5-f574e1cf8bdc.png\" alt=\"after\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" \/><noscript><img decoding=\"async\" src=\"https:\/\/cloud.githubusercontent.com\/assets\/127379\/19913328\/ed111d32-a0a1-11e6-8ba5-f574e1cf8bdc.png\" alt=\"after\" \/><\/noscript><\/p>\n<p>We&#8217;re excited for you to test these out and see the performance increase!<\/p>\n<p><!--more--><\/p>\n<h3>Error Reporting<\/h3>\n<p>Last week, both <a href=\"https:\/\/www.youtube.com\/watch?v=Nu-XuqCXszY\">Max<\/a> and <a href=\"https:\/\/www.youtube.com\/watch?v=NaBlMuhxrzg\">I<\/a> shared videos about the new error reporting information in App Scripts. This way, we can remove the feared &#8220;white screen of death\u201d. Now, if something happens during your build, you&#8217;ll get that information added right away, instead of a blank screen.<\/p>\n<p>We wanted to go even further, so we&#8217;ve improved on this and have also added run time error catching! For those who aren&#8217;t quite sure what this is, imagine this situation&#8230;<\/p>\n<blockquote><p>\n  You&#8217;re testing your app, tapping through screens, then all of a sudden&#8230;nothing. The entire app stops, and you can\u2019t go back or go forward to any pages. What happened?\n<\/p><\/blockquote>\n<p>We wanted to do away with that, so we&#8217;ve added a custom <code>ErrorHandling<\/code> class to Ionic that ties into the App Scripts dev server. Here\u2019s what it looks like:<\/p>\n<p><a target=\"_blank\" href=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/11\/run-time-error.gif\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"625\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/11\/run-time-error.gif\" alt=\"run-time-error\" class=\"aligncenter size-full wp-image-1527 lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1000px; --smush-placeholder-aspect-ratio: 1000\/625;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"625\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/11\/run-time-error.gif\" alt=\"run-time-error\" class=\"aligncenter size-full wp-image-1527\" \/><\/noscript><\/a><\/p>\n<p>If for some reason you run into an error, now we can display something meaningful and provide the right information. While this is cool, we wanted to go beyond that and add a new bit of UI to this.<\/p>\n<p><a target=\"_blank\" href=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/11\/run-time-error-overlay.gif\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"625\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/11\/run-time-error-overlay.gif\" alt=\"run-time-error-overlay\" class=\"aligncenter size-full wp-image-1526 lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1000px; --smush-placeholder-aspect-ratio: 1000\/625;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"625\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2016\/11\/run-time-error-overlay.gif\" alt=\"run-time-error-overlay\" class=\"aligncenter size-full wp-image-1526\" \/><\/noscript><\/a><\/p>\n<p>If you do get an error and want to reload the app, you can hit <code>ctrl-shift-8<\/code> (<code>cmd-shift-8<\/code> for mac) to display a list of debug options. Currently, we only have the option to reload the app, but we&#8217;ll be expanding to include a few other options. What&#8217;s even better is that this sort of functionally is also available on a real device with live-reload!<\/p>\n<pre><code class=\"bash\">$ ionic run android -lc\n<\/code><\/pre>\n<p>Once it\u2019s deployed, just shake the device, and the debug action sheet will be displayed. But what about turning it off for production builds? This is handled automatically, in order to avoid any&#8230;awkward moments in a production app.<\/p>\n<h3>How to get it<\/h3>\n<p>In order to get this new feature, you&#8217;ll want to make sure you have the most up to date CLI.<\/p>\n<pre><code class=\"bash\">$ npm install -g ionic\n\n\n$ ionic -v\n# should return at least 2.1.12\n<\/code><\/pre>\n<p>If you&#8217;re starting a new project, you should be good! But if you have an older project that you want to update, you&#8217;ll want to update the following packages.<\/p>\n<pre><code class=\"bash\">$ npm install ionic-angular@latest --save\n# get RC3 of ionic-angular\n\n\n$ npm install @ionic\/app-scripts@latest --save-dev\n# get the latest app-scripts package\n<\/code><\/pre>\n<p>For a complete list of what your package.json should be updated to, check out the <a href=\"https:\/\/github.com\/driftyco\/ionic\/blob\/master\/CHANGELOG.md#200-rc3-2016-11-17\">RC3 Changelog<\/a><\/p>\n<p>After installing those packages, open <code>src\/app\/app.module.ts<\/code> and import <code>ErrorHandler<\/code> from angular and <code>IonicErrorHandler<\/code> from ionic-angular.<\/p>\n<pre><code class=\"javascript\">import { NgModule, ErrorHandler } from &#039;@angular\/core&#039;;\nimport { IonicApp, IonicModule, IonicErrorHandler } from &#039;ionic-angular&#039;;\n\n@NgModule({\n\n  \/\/ Here we tell the Angular ErrorHandling class\n  \/\/ that it should be using the IonicErrorHandler class for any errors\n  providers: [{provide: ErrorHandler, useClass: IonicErrorHandler}]\n})\n<\/code><\/pre>\n<p>That&#8217;s it! Now, any runtime errors can be better handled by Ionic&#8217;s build tools.<\/p>\n<h3>Ionic Module Template<\/h3>\n<p>We&#8217;ve heard many questions from developers trying to build reusable Angular 2 and Ionic 2 modules, and how to get them to work with Angular&#8217;s ngc and Ahead-of-Time compiling. To help, we&#8217;ve put together a starting template that you can use to build your own modules. It&#8217;s a very new release, so please let us know if you run into issues or have questions and we&#8217;ll get it sorted.<\/p>\n<p><a href=\"https:\/\/github.com\/driftyco\/ionic-module-template\">Ionic Module Template<\/a><\/p>\n<h3>So what&#8217;s left?<\/h3>\n<p>With App Scripts reaching a stable point, the framework is team focusing on the final batch of bug fixes and performance improvements, meaning&#8230;we&#8217;re in the final stretch here! It&#8217;s been a crazy road to get here, and from everyone at Ionic, we couldn&#8217;t have done it without your input and help in testing things. So, keep an eye out as we go heads down and work on getting 2.0 Final out the door.<\/p>\n<p>Cheers!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Howdy, folks! I just wanted to share a few updates on things and talk about an amazing new feature in the Ionic build process. Framework Updates RC3 has shipped ? ! We\u2019ve been hard at work closing issues and improving the performance of our components. Three components in particular\u2014Menu, Sliding Items, and DateTime\u2014have had significant [&hellip;]<\/p>\n","protected":false},"author":5,"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,13],"class_list":["post-1525","post","type-post","status-publish","format-standard","hentry","category-all","tag-ionic","tag-ionic-2"],"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>RC3, Error Reporting, Final, Oh My! - 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\/rc3-error-reporting-final-oh-my\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"RC3, Error Reporting, Final, Oh My!\" \/>\n<meta property=\"og:description\" content=\"Howdy, folks! I just wanted to share a few updates on things and talk about an amazing new feature in the Ionic build process. Framework Updates RC3 has shipped ? ! We\u2019ve been hard at work closing issues and improving the performance of our components. Three components in particular\u2014Menu, Sliding Items, and DateTime\u2014have had significant [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my\" \/>\n<meta property=\"og:site_name\" content=\"Ionic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-11-22T15:43:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-12-09T16:14:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cloud.githubusercontent.com\/assets\/127379\/19913327\/ed1047fe-a0a1-11e6-9edb-f37eb5aa673b.png\" \/>\n<meta name=\"author\" content=\"Mike Hartington\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mhartington\" \/>\n<meta name=\"twitter:site\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mike Hartington\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my#article\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my\"},\"author\":{\"name\":\"Mike Hartington\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/c8c92b04d526adb925ea514c619a267b\"},\"headline\":\"RC3, Error Reporting, Final, Oh My!\",\"datePublished\":\"2016-11-22T15:43:12+00:00\",\"dateModified\":\"2016-12-09T16:14:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my\"},\"wordCount\":647,\"commentCount\":47,\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cloud.githubusercontent.com\/assets\/127379\/19913327\/ed1047fe-a0a1-11e6-9edb-f37eb5aa673b.png\",\"keywords\":[\"Ionic\",\"Ionic 2\"],\"articleSection\":[\"All\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my\",\"url\":\"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my\",\"name\":\"RC3, Error Reporting, Final, Oh My! - Ionic Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cloud.githubusercontent.com\/assets\/127379\/19913327\/ed1047fe-a0a1-11e6-9edb-f37eb5aa673b.png\",\"datePublished\":\"2016-11-22T15:43:12+00:00\",\"dateModified\":\"2016-12-09T16:14:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my#primaryimage\",\"url\":\"https:\/\/cloud.githubusercontent.com\/assets\/127379\/19913327\/ed1047fe-a0a1-11e6-9edb-f37eb5aa673b.png\",\"contentUrl\":\"https:\/\/cloud.githubusercontent.com\/assets\/127379\/19913327\/ed1047fe-a0a1-11e6-9edb-f37eb5aa673b.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ionic.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"RC3, Error Reporting, Final, Oh My!\"}]},{\"@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\/c8c92b04d526adb925ea514c619a267b\",\"name\":\"Mike Hartington\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/08\/mike-headshot-2-smaller-150x150.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/08\/mike-headshot-2-smaller-150x150.png\",\"caption\":\"Mike Hartington\"},\"description\":\"Director of Developer Relations\",\"sameAs\":[\"https:\/\/twitter.com\/mhartington\",\"https:\/\/x.com\/mhartington\"],\"url\":\"https:\/\/ionic.io\/blog\/author\/mike\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"RC3, Error Reporting, Final, Oh My! - 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\/rc3-error-reporting-final-oh-my","og_locale":"en_US","og_type":"article","og_title":"RC3, Error Reporting, Final, Oh My!","og_description":"Howdy, folks! I just wanted to share a few updates on things and talk about an amazing new feature in the Ionic build process. Framework Updates RC3 has shipped ? ! We\u2019ve been hard at work closing issues and improving the performance of our components. Three components in particular\u2014Menu, Sliding Items, and DateTime\u2014have had significant [&hellip;]","og_url":"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my","og_site_name":"Ionic Blog","article_published_time":"2016-11-22T15:43:12+00:00","article_modified_time":"2016-12-09T16:14:42+00:00","og_image":[{"url":"https:\/\/cloud.githubusercontent.com\/assets\/127379\/19913327\/ed1047fe-a0a1-11e6-9edb-f37eb5aa673b.png"}],"author":"Mike Hartington","twitter_card":"summary_large_image","twitter_creator":"@mhartington","twitter_site":"@ionicframework","twitter_misc":{"Written by":"Mike Hartington","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my#article","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my"},"author":{"name":"Mike Hartington","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/c8c92b04d526adb925ea514c619a267b"},"headline":"RC3, Error Reporting, Final, Oh My!","datePublished":"2016-11-22T15:43:12+00:00","dateModified":"2016-12-09T16:14:42+00:00","mainEntityOfPage":{"@id":"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my"},"wordCount":647,"commentCount":47,"publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"image":{"@id":"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my#primaryimage"},"thumbnailUrl":"https:\/\/cloud.githubusercontent.com\/assets\/127379\/19913327\/ed1047fe-a0a1-11e6-9edb-f37eb5aa673b.png","keywords":["Ionic","Ionic 2"],"articleSection":["All"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my","url":"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my","name":"RC3, Error Reporting, Final, Oh My! - Ionic Blog","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my#primaryimage"},"image":{"@id":"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my#primaryimage"},"thumbnailUrl":"https:\/\/cloud.githubusercontent.com\/assets\/127379\/19913327\/ed1047fe-a0a1-11e6-9edb-f37eb5aa673b.png","datePublished":"2016-11-22T15:43:12+00:00","dateModified":"2016-12-09T16:14:42+00:00","breadcrumb":{"@id":"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my#primaryimage","url":"https:\/\/cloud.githubusercontent.com\/assets\/127379\/19913327\/ed1047fe-a0a1-11e6-9edb-f37eb5aa673b.png","contentUrl":"https:\/\/cloud.githubusercontent.com\/assets\/127379\/19913327\/ed1047fe-a0a1-11e6-9edb-f37eb5aa673b.png"},{"@type":"BreadcrumbList","@id":"https:\/\/ionic.io\/blog\/rc3-error-reporting-final-oh-my#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ionic.io\/blog"},{"@type":"ListItem","position":2,"name":"RC3, Error Reporting, Final, Oh My!"}]},{"@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\/c8c92b04d526adb925ea514c619a267b","name":"Mike Hartington","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/08\/mike-headshot-2-smaller-150x150.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/08\/mike-headshot-2-smaller-150x150.png","caption":"Mike Hartington"},"description":"Director of Developer Relations","sameAs":["https:\/\/twitter.com\/mhartington","https:\/\/x.com\/mhartington"],"url":"https:\/\/ionic.io\/blog\/author\/mike"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/1525","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\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/comments?post=1525"}],"version-history":[{"count":0,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/1525\/revisions"}],"wp:attachment":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media?parent=1525"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/categories?post=1525"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/tags?post=1525"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}