{"id":4798,"date":"2023-01-31T11:18:05","date_gmt":"2023-01-31T16:18:05","guid":{"rendered":"https:\/\/ionic.io\/blog\/?p=4798"},"modified":"2023-01-31T17:50:36","modified_gmt":"2023-01-31T22:50:36","slug":"easily-automate-mobile-configuration-in-appflow-with-trapeze","status":"publish","type":"post","link":"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze","title":{"rendered":"Easily Automate Mobile Configuration in Appflow with Trapeze"},"content":{"rendered":"\n<p>If there\u2019s one thing that developers love, it\u2019s automation. Reducing the number of manual steps required to build and maintain an app (ideally to zero) is one of the most satisfying parts of development work. This becomes increasingly important when developing multiple apps (sometimes dozens at large companies!) at scale.<\/p>\n\n\n\n<p>I\u2019m happy to share that the Ionic team has made improvements to <a href=\"https:\/\/ionic.io\/blog\/appflow\">Appflow<\/a>, our mobile CI\/CD solution, to make project configuration easier. Along with <a href=\"https:\/\/trapeze.dev\">Trapeze<\/a>, Ionic\u2019s native and cross-platform mobile project configuration tool, it\u2019s never been easier to manage your mobile projects at scale. Whether you\u2019re managing one iOS and Android app or dozens of white-labeled products, these tools are the best way to automate complex configurations.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Using a simple YAML-based configuration file format, developers can automate their project configuration for all types of mobile apps, including traditional iOS and Android apps and those built with cross-platform frameworks like Capacitor, React Native, and Flutter.<\/p>\n\n\n\n<p>Let\u2019s look at how to integrate Trapeze into Appflow.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Integrate Trapeze into Appflow<\/h2>\n\n\n\n<p>Before you can use Trapeze in Appflow, you\u2019ll need to be an Appflow user. <a href=\"https:\/\/ionic.io\/signup?product=appflow\">Sign up for free<\/a>, then <a href=\"https:\/\/ionic.io\/docs\/appflow\/quickstart\/connect\">add your app to Appflow<\/a>.<\/p>\n\n\n\n<p>Next, install Trapeze into your project:<\/p>\n\n\n\n<div class=\"wp-block-jetpack-markdown\"><pre><code class=\"language-bash\">npm install @trapezedev\/configure\n<\/code><\/pre>\n<\/div>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Note: Appflow integration requires Trapeze version 7.0.7 and above.<\/p>\n<\/blockquote>\n\n\n\n<p>Next, create a YAML file at the root of your project, such as this example, which automatically increments the build numbers of the Android and iOS native projects.<\/p>\n\n\n\n<div class=\"wp-block-jetpack-markdown\"><pre><code class=\"language-bash\"># appflow.yml\nvars:\n  CI_BUILD_NUMBER:\n    default: 1\n\nplatforms:\n  ios:\n    buildNumber: $CI_BUILD_NUMBER\n  android:\n    versionCode: $CI_BUILD_NUMBER\n<\/code><\/pre>\n<\/div>\n\n\n\n<p>Finally, execute the Trapeze YAML script using the <code>appflow:build<\/code> build command. If Appflow finds this command in your <code>package.json<\/code> file, it will run it instead of the npm build script.<\/p>\n\n\n\n<div class=\"wp-block-jetpack-markdown\"><pre><code class=\"language-bash\"># package.json\n\u201cscripts\u201d: {\n  &quot;appflow:build&quot;: &quot;npx trapeze run appflow.yml -y --$CI_PLATFORM &amp;&amp; npm run build&quot;\n}\n<\/code><\/pre>\n<\/div>\n\n\n\n<p>The Appflow-provided <code>$CI_PLATFORM<\/code> environment variable dynamically resolves to the platform name of the currently running build (either <code>ios<\/code> or <code>android<\/code>). The new <code>--ios<\/code> and <code>--android<\/code> flags tell Trapeze to run the specified platform only. Since Appflow only builds one platform at a time, combining these features effectively allows us to use one Trapeze script containing both iOS and Android commands in Appflow. \ud83c\udf89<\/p>\n\n\n\n<p>With Trapeze configured locally, push a code commit to Appflow then start a new iOS or Android build to put your Trapeze script into action. The build output for an iOS build will look similar to this:<\/p>\n\n\n\n<div class=\"wp-block-jetpack-markdown\"><pre><code class=\"language-bash\">Appflow build script detected...\n$ npm run appflow:build\n&gt; capacitor-trapeze-tester@0.0.1 appflow:build\n&gt; npx trapeze run ci.yaml -y --$CI_PLATFORM &amp;&amp; npm run build\n\u25b8 run ios buildNumber 25\n\u25b8 skip android versionCode 25\n\u25b8 updated ios\/App\/App.xcodeproj\/project.pbxproj\n\u25b8 updated ios\/App\/App\/Info.plist\n\u25b8 [info] -y provided, automatically applying configuration\n<\/code><\/pre>\n<\/div>\n\n\n\n<p>In the example, this was the 25th build, so the iOS build number was set to 25.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"310\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-trapeze-ios-build-1024x310.jpg\" alt=\"\" class=\"wp-image-4803 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-trapeze-ios-build-1024x310.jpg 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-trapeze-ios-build-300x91.jpg 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-trapeze-ios-build-768x232.jpg 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-trapeze-ios-build.jpg 1160w\" data-sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/310;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"310\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-trapeze-ios-build-1024x310.jpg\" alt=\"\" class=\"wp-image-4803\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-trapeze-ios-build-1024x310.jpg 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-trapeze-ios-build-300x91.jpg 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-trapeze-ios-build-768x232.jpg 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-trapeze-ios-build.jpg 1160w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/noscript><\/figure>\n<\/div>\n\n\n<p>For a cross-platform friendly script, add a check to the beginning of the build script to only run Trapeze during a mobile build:<\/p>\n\n\n\n<div class=\"wp-block-jetpack-markdown\"><pre><code class=\"language-bash\">&quot;appflow:build&quot;: &quot;if [ \\&quot;$CI_PLATFORM\\&quot; != \\&quot;web\\&quot; ]; then npx trapeze run ci.yaml -y --$CI_PLATFORM; fi &amp;&amp; npm run build&quot;,\n<\/code><\/pre>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Integrate Trapeze into your Appflow CI\/CD Workflows Today<\/h2>\n\n\n\n<p>Trapeze comes with a <a href=\"https:\/\/trapeze.dev\/docs\/Operations\/getting-started\">large set of supported operations<\/a> across iOS and Android, as well as other practical operations that can work across projects. These include adjusting build settings, advanced app configuration, environment-specific configurations (i.e. dev vs. production), internationalization and localization, and more.<\/p>\n\n\n\n<p>Since Trapeze was built with CI\/CD in mind, it\u2019s a perfect fit for Appflow. <a href=\"https:\/\/ionic.io\/blog\/appflow\">Get started with Appflow today<\/a> and let us know how you\u2019re using Trapeze to automate your mobile projects in the comments below.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If there\u2019s one thing that developers love, it\u2019s automation. Reducing the number of manual steps required to build and maintain an app (ideally to zero) is one of the most satisfying parts of development work. This becomes increasingly important when developing multiple apps (sometimes dozens at large companies!) at scale. I\u2019m happy to share that [&hellip;]<\/p>\n","protected":false},"author":62,"featured_media":4801,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"publish_to_discourse":"1","publish_post_category":"20","wpdc_auto_publish_overridden":"","wpdc_topic_tags":"","wpdc_pin_topic":"","wpdc_pin_until":"","discourse_post_id":"558926","discourse_permalink":"http:\/\/forum.ionicframework.com\/t\/easily-automate-mobile-configuration-in-appflow-with-trapeze\/230757","wpdc_publishing_response":"success","wpdc_publishing_error":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[120,122],"tags":[128,267],"class_list":["post-4798","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-announcements","category-product","tag-appflow","tag-trapeze"],"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>Easily Automate Mobile Configuration in Appflow with Trapeze - Ionic Blog<\/title>\n<meta name=\"description\" content=\"Developers can easily automate mobile project configuration with Appflow and Trapeze using a simple YAML-based configuration file format.\" \/>\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\/easily-automate-mobile-configuration-in-appflow-with-trapeze\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Easily Automate Mobile Configuration in Appflow with Trapeze\" \/>\n<meta property=\"og:description\" content=\"Developers can easily automate mobile project configuration with Appflow and Trapeze using a simple YAML-based configuration file format.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze\" \/>\n<meta property=\"og:site_name\" content=\"Ionic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-31T16:18:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-01-31T22:50:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-and-trapeze-feature-image.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2240\" \/>\n\t<meta property=\"og:image:height\" content=\"1120\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Matt Netkow\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dotNetkow\" \/>\n<meta name=\"twitter:site\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matt Netkow\" \/>\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\/easily-automate-mobile-configuration-in-appflow-with-trapeze#article\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze\"},\"author\":{\"name\":\"Matt Netkow\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/93c8b2fe110f183510c6285b0de40790\"},\"headline\":\"Easily Automate Mobile Configuration in Appflow with Trapeze\",\"datePublished\":\"2023-01-31T16:18:05+00:00\",\"dateModified\":\"2023-01-31T22:50:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze\"},\"wordCount\":503,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-and-trapeze-feature-image.png\",\"keywords\":[\"Appflow\",\"trapeze\"],\"articleSection\":[\"Announcements\",\"Product\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze\",\"url\":\"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze\",\"name\":\"Easily Automate Mobile Configuration in Appflow with Trapeze - Ionic Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-and-trapeze-feature-image.png\",\"datePublished\":\"2023-01-31T16:18:05+00:00\",\"dateModified\":\"2023-01-31T22:50:36+00:00\",\"description\":\"Developers can easily automate mobile project configuration with Appflow and Trapeze using a simple YAML-based configuration file format.\",\"breadcrumb\":{\"@id\":\"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze#primaryimage\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-and-trapeze-feature-image.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-and-trapeze-feature-image.png\",\"width\":2240,\"height\":1120},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ionic.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Easily Automate Mobile Configuration in Appflow with Trapeze\"}]},{\"@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\/93c8b2fe110f183510c6285b0de40790\",\"name\":\"Matt Netkow\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/07\/mattnetkow-150x150.jpg\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/07\/mattnetkow-150x150.jpg\",\"caption\":\"Matt Netkow\"},\"sameAs\":[\"https:\/\/x.com\/dotNetkow\"],\"url\":\"https:\/\/ionic.io\/blog\/author\/mattnetkow\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Easily Automate Mobile Configuration in Appflow with Trapeze - Ionic Blog","description":"Developers can easily automate mobile project configuration with Appflow and Trapeze using a simple YAML-based configuration file format.","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\/easily-automate-mobile-configuration-in-appflow-with-trapeze","og_locale":"en_US","og_type":"article","og_title":"Easily Automate Mobile Configuration in Appflow with Trapeze","og_description":"Developers can easily automate mobile project configuration with Appflow and Trapeze using a simple YAML-based configuration file format.","og_url":"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze","og_site_name":"Ionic Blog","article_published_time":"2023-01-31T16:18:05+00:00","article_modified_time":"2023-01-31T22:50:36+00:00","og_image":[{"width":2240,"height":1120,"url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-and-trapeze-feature-image.png","type":"image\/png"}],"author":"Matt Netkow","twitter_card":"summary_large_image","twitter_creator":"@dotNetkow","twitter_site":"@ionicframework","twitter_misc":{"Written by":"Matt Netkow","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze#article","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze"},"author":{"name":"Matt Netkow","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/93c8b2fe110f183510c6285b0de40790"},"headline":"Easily Automate Mobile Configuration in Appflow with Trapeze","datePublished":"2023-01-31T16:18:05+00:00","dateModified":"2023-01-31T22:50:36+00:00","mainEntityOfPage":{"@id":"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze"},"wordCount":503,"commentCount":0,"publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"image":{"@id":"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-and-trapeze-feature-image.png","keywords":["Appflow","trapeze"],"articleSection":["Announcements","Product"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze","url":"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze","name":"Easily Automate Mobile Configuration in Appflow with Trapeze - Ionic Blog","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze#primaryimage"},"image":{"@id":"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-and-trapeze-feature-image.png","datePublished":"2023-01-31T16:18:05+00:00","dateModified":"2023-01-31T22:50:36+00:00","description":"Developers can easily automate mobile project configuration with Appflow and Trapeze using a simple YAML-based configuration file format.","breadcrumb":{"@id":"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze#primaryimage","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-and-trapeze-feature-image.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-and-trapeze-feature-image.png","width":2240,"height":1120},{"@type":"BreadcrumbList","@id":"https:\/\/ionic.io\/blog\/easily-automate-mobile-configuration-in-appflow-with-trapeze#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ionic.io\/blog"},{"@type":"ListItem","position":2,"name":"Easily Automate Mobile Configuration in Appflow with Trapeze"}]},{"@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\/93c8b2fe110f183510c6285b0de40790","name":"Matt Netkow","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/07\/mattnetkow-150x150.jpg","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/07\/mattnetkow-150x150.jpg","caption":"Matt Netkow"},"sameAs":["https:\/\/x.com\/dotNetkow"],"url":"https:\/\/ionic.io\/blog\/author\/mattnetkow"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/01\/appflow-and-trapeze-feature-image.png","_links":{"self":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/4798","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\/62"}],"replies":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/comments?post=4798"}],"version-history":[{"count":8,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/4798\/revisions"}],"predecessor-version":[{"id":4830,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/4798\/revisions\/4830"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media\/4801"}],"wp:attachment":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media?parent=4798"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/categories?post=4798"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/tags?post=4798"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}