{"id":6107,"date":"2024-04-30T11:02:59","date_gmt":"2024-04-30T15:02:59","guid":{"rendered":"https:\/\/ionic.io\/blog\/?p=6107"},"modified":"2024-04-30T11:03:03","modified_gmt":"2024-04-30T15:03:03","slug":"why-is-mobile-ci-cd-so-difficult","status":"publish","type":"post","link":"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult","title":{"rendered":"Why is mobile CI\/CD so difficult?"},"content":{"rendered":"\n<p>In today&#8217;s competitive mobile landscape, software development teams are under constant pressure to rapidly deliver high-quality applications. Traditional CI\/CD tools excel at automating workflows for web applications, but are less effective when directly applied to mobile app development.<\/p>\n\n\n\n<p>So why is building a full development lifecycle for mobile apps so challenging? And how can mobile development teams benefit from DevOps practices to feed their app development pipeline? First, let\u2019s discuss the complexities of mobile CI\/CD, then we\u2019ll explore the benefits of using a specialized CI\/CD solution.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Steps to deliver mobile apps<\/h2>\n\n\n\n<p>When building a mobile CI\/CD workflow, many steps are required to move the application from development to deployment.<\/p>\n\n\n\n<p><strong>Build:<\/strong> Set up consistent, repeatable mobile build environments so apps can be built on every commit, using predictable dev tools, a blank slate, and operating systems for iOS, Android, and the web.<\/p>\n\n\n\n<p><strong>Test:<\/strong> Run unit tests and other scripts on every commit to ensure the app continues to function as expected.<\/p>\n\n\n\n<p><strong>Deploy:<\/strong> Release working updates to users in real-time for web-based content, or submit updated binaries to the app stores for approval.<\/p>\n\n\n\n<p><strong>Iterate:<\/strong> Repeat the build\/test\/deploy process to continually add new features, update core functionality, enhance security, and improve user experience.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The difficulties of mobile CI\/CD<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Slow app store approval process<\/h3>\n\n\n\n<p>Unlike web apps, mobile apps are gated by app stores and require approval before being published. This review process can take days or even weeks, delaying deployments. As developers branch code to continue working during the review period, subsequent changes must be rolled back into the main trunk, creating extra work for developers to merge, test, and troubleshoot updated code.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cumbersome certificate management and signing<\/h3>\n\n\n\n<p>App stores require code signing, but maintaining signing certificates and provisioning profiles can be a burden \u2013 especially for larger teams. Certificates typically require annual renewal and careful management to avoid disruptions when submitting apps for approval. Additionally, the responsibility for securing and managing these certificates often falls outside the core development team, introducing communication overhead and potential delays.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Inefficient process to fix bugs<\/h3>\n\n\n\n<p>Mobile developers need a higher degree of confidence before pushing an update. Fixing issues after a release requires the developer to hop through the approval process again, wasting significant time. This can lead to frustrated users and it hinders the development team&#8217;s ability to deliver a smooth user experience in a timely manner. Feature flags can be used to mitigate this risk, but at the expense of adding further complexity to the project.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Testing complexities<\/h3>\n\n\n\n<p>Effective mobile app testing requires a number of considerations. An array of operating system versions, embedded web view versions, and device differences like screen size and resolution all contribute to numerous testing scenarios. Network reliability also plays a significant role, as user experiences can vary depending on network conditions. Additionally, testing the binary submitted to the app store often differs from code tested during development.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Lingering outdated versions<\/h3>\n\n\n\n<p>Unlike web apps where updates are often pushed automatically, forcing updates on mobile apps is generally not feasible. Legacy app versions can linger on user devices indefinitely, making it difficult to completely eliminate bugs while also presenting challenges for developers who want to introduce new features for all users. The control ultimately lies with the end-user, and forcing updates can be a negative user experience.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mac infrastructure requirements<\/h3>\n\n\n\n<p>Building iOS apps necessitates access to Mac hardware. This can create limitations for development teams who don&#8217;t have Mac resources readily available, especially when scaling iOS builds. Managing and maintaining a dedicated Mac infrastructure specifically for app builds adds complexity to the development process.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cross-functional knowledge and collaboration<\/h3>\n\n\n\n<p>Mobile CI\/CD often requires collaboration between different teams. Operations teams often need to set up backend triggers that initiate builds based on code commits. Mobile development teams are responsible for signing and packaging the app for distribution. This demands a certain level of expertise in both automating mobile builds and app distribution across both teams, which can be a challenge.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">App store asset requirements<\/h3>\n\n\n\n<p>App store submissions come with specific asset requirements. This can include creating multiple app icon sizes, capturing screenshots showcasing various pages on different device ratios, crafting compelling app descriptions, and formulating app update messages. Managing these assets adds another layer of complexity to the app development and deployment process.<\/p>\n\n\n\n<p>If this sounds like an overwhelming number of activities to coordinate or requires skills outside your wheelhouse, you\u2019re not alone.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ionic Appflow can help<\/h2>\n\n\n\n<p>Building a robust mobile CI\/CD pipeline from scratch can be cumbersome, hinder development velocity, and create extra overhead for development teams that are already stretched thin. Fortunately, you don\u2019t need to build from the ground up \u2013 Ionic Appflow is a comprehensive mobile CI\/CD platform designed to streamline the app development lifecycle. Here&#8217;s how Appflow tackles the challenges mentioned above:<\/p>\n\n\n\n<p><strong>Cloud-based builds:<\/strong> Eliminate the need to manage infrastructure by leveraging <a href=\"https:\/\/ionic.io\/blog\/managing-build-environments-in-appflow\">Appflow&#8217;s hosted environments<\/a> for generating native app builds. This ensures a stable and fully managed build process for all team members.<\/p>\n\n\n\n<p><strong>Streamlined app store submissions:<\/strong> Effortlessly publish your mobile apps directly to app stores through Appflow. Automate updates, bug fixes, and new feature releases with a single click.<\/p>\n\n\n\n<p><strong>Automated workflows and signing:<\/strong> Appflow automates builds, updates, and app store releases. It eliminates the complexity of mobile certificate signing and provisioning profile management.<\/p>\n\n\n\n<p><strong>Improved bug fixes and feature rollouts:<\/strong> Appflow&#8217;s streamlined deployments allow for faster bug fixes and feature rollouts. With <a href=\"https:\/\/ionic.io\/appflow\/live-updates\">Live Updates<\/a>, you can push updated web-based code to users immediately, without submitting new binaries and waiting for app store approval.<\/p>\n\n\n\n<p><strong>Native build testing with in-app previews:<\/strong> Appflow offers <a href=\"https:\/\/ionic.io\/blog\/simplify-native-build-testing-with-native-app-previews-in-appflow\">in-browser testing using native app previews<\/a> on a wide range of virtual devices for both iOS and Android platforms. Using our Appetize.io integration, developers can build and test apps without ever leaving Appflow.<\/p>\n\n\n\n<p><strong>Effortless app store asset management:<\/strong> Appflow provides tools to manage and upload all your app store assets, simplifying the app submission process and reducing the risk of errors.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"990\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/appflow-blog-image-1024x990.png\" alt=\"\" class=\"wp-image-6110 lazyload\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/990;width:495px;height:auto\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/appflow-blog-image-1024x990.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/appflow-blog-image-300x290.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/appflow-blog-image-768x743.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/appflow-blog-image-1536x1485.png 1536w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/appflow-blog-image-2048x1981.png 2048w\" data-sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"990\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/appflow-blog-image-1024x990.png\" alt=\"\" class=\"wp-image-6110\" style=\"width:495px;height:auto\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/appflow-blog-image-1024x990.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/appflow-blog-image-300x290.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/appflow-blog-image-768x743.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/appflow-blog-image-1536x1485.png 1536w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/appflow-blog-image-2048x1981.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/noscript><\/figure>\n\n\n\n<p>By using Appflow, development teams can overcome the unique challenges associated with mobile CI\/CD and streamline the entire mobile app development process. Appflow empowers developers to focus on building great apps while automating repetitive tasks and ensuring seamless deployments. With faster delivery cycles, improved code quality, and a smoother path to app store approvals, Appflow is the ideal solution for development <a href=\"https:\/\/ionic.io\/resources\/case-studies\/topicus\">teams looking to take their mobile app development to the next level<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ready to learn more?<\/h2>\n\n\n\n<p>Request a demo from an Ionic <a href=\"https:\/\/ionic.io\/contact\/sales\">App Development Specialist<\/a> and discover how Appflow can revolutionize your mobile CI\/CD pipeline.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We discuss the complexities of mobile CI\/CD, then explore the benefits of using a specialized CI\/CD solution.<\/p>\n","protected":false},"author":102,"featured_media":6112,"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":"576067","discourse_permalink":"http:\/\/forum.ionicframework.com\/t\/why-is-mobile-ci-cd-so-difficult\/241359","wpdc_publishing_response":"success","wpdc_publishing_error":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1,123],"tags":[258,68],"class_list":["post-6107","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-all","category-perspectives","tag-mobile-ci-cd","tag-mobile-development"],"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>Why is mobile CI\/CD so difficult? - Ionic Blog<\/title>\n<meta name=\"description\" content=\"We discuss the complexities of mobile CI\/CD, then explore the benefits of using a specialized CI\/CD solution.\" \/>\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\/why-is-mobile-ci-cd-so-difficult\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Why is mobile CI\/CD so difficult?\" \/>\n<meta property=\"og:description\" content=\"We discuss the complexities of mobile CI\/CD, then explore the benefits of using a specialized CI\/CD solution.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult\" \/>\n<meta property=\"og:site_name\" content=\"Ionic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-04-30T15:02:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T15:03:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/cicd-feature-image-1024x512.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"John Arnsdorf\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:site\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"John Arnsdorf\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult#article\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult\"},\"author\":{\"name\":\"John Arnsdorf\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/3a62846f80226e66362463a47ab7fb3f\"},\"headline\":\"Why is mobile CI\/CD so difficult?\",\"datePublished\":\"2024-04-30T15:02:59+00:00\",\"dateModified\":\"2024-04-30T15:03:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult\"},\"wordCount\":1109,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/cicd-feature-image.png\",\"keywords\":[\"Mobile CI\/CD\",\"mobile development\"],\"articleSection\":[\"All\",\"Perspectives\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult\",\"url\":\"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult\",\"name\":\"Why is mobile CI\/CD so difficult? - Ionic Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/cicd-feature-image.png\",\"datePublished\":\"2024-04-30T15:02:59+00:00\",\"dateModified\":\"2024-04-30T15:03:03+00:00\",\"description\":\"We discuss the complexities of mobile CI\/CD, then explore the benefits of using a specialized CI\/CD solution.\",\"breadcrumb\":{\"@id\":\"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult#primaryimage\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/cicd-feature-image.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/cicd-feature-image.png\",\"width\":2240,\"height\":1120},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ionic.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Why is mobile CI\/CD so difficult?\"}]},{\"@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\/3a62846f80226e66362463a47ab7fb3f\",\"name\":\"John Arnsdorf\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/1663623003247-150x150.jpeg\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/1663623003247-150x150.jpeg\",\"caption\":\"John Arnsdorf\"},\"url\":\"https:\/\/ionic.io\/blog\/author\/john-arnsdorf\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Why is mobile CI\/CD so difficult? - Ionic Blog","description":"We discuss the complexities of mobile CI\/CD, then explore the benefits of using a specialized CI\/CD solution.","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\/why-is-mobile-ci-cd-so-difficult","og_locale":"en_US","og_type":"article","og_title":"Why is mobile CI\/CD so difficult?","og_description":"We discuss the complexities of mobile CI\/CD, then explore the benefits of using a specialized CI\/CD solution.","og_url":"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult","og_site_name":"Ionic Blog","article_published_time":"2024-04-30T15:02:59+00:00","article_modified_time":"2024-04-30T15:03:03+00:00","og_image":[{"width":1024,"height":512,"url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/cicd-feature-image-1024x512.png","type":"image\/png"}],"author":"John Arnsdorf","twitter_card":"summary_large_image","twitter_creator":"@ionicframework","twitter_site":"@ionicframework","twitter_misc":{"Written by":"John Arnsdorf","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult#article","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult"},"author":{"name":"John Arnsdorf","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/3a62846f80226e66362463a47ab7fb3f"},"headline":"Why is mobile CI\/CD so difficult?","datePublished":"2024-04-30T15:02:59+00:00","dateModified":"2024-04-30T15:03:03+00:00","mainEntityOfPage":{"@id":"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult"},"wordCount":1109,"commentCount":0,"publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"image":{"@id":"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/cicd-feature-image.png","keywords":["Mobile CI\/CD","mobile development"],"articleSection":["All","Perspectives"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult","url":"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult","name":"Why is mobile CI\/CD so difficult? - Ionic Blog","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult#primaryimage"},"image":{"@id":"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/cicd-feature-image.png","datePublished":"2024-04-30T15:02:59+00:00","dateModified":"2024-04-30T15:03:03+00:00","description":"We discuss the complexities of mobile CI\/CD, then explore the benefits of using a specialized CI\/CD solution.","breadcrumb":{"@id":"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult#primaryimage","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/cicd-feature-image.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/cicd-feature-image.png","width":2240,"height":1120},{"@type":"BreadcrumbList","@id":"https:\/\/ionic.io\/blog\/why-is-mobile-ci-cd-so-difficult#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ionic.io\/blog"},{"@type":"ListItem","position":2,"name":"Why is mobile CI\/CD so difficult?"}]},{"@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\/3a62846f80226e66362463a47ab7fb3f","name":"John Arnsdorf","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/1663623003247-150x150.jpeg","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/1663623003247-150x150.jpeg","caption":"John Arnsdorf"},"url":"https:\/\/ionic.io\/blog\/author\/john-arnsdorf"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/cicd-feature-image.png","_links":{"self":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/6107","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\/102"}],"replies":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/comments?post=6107"}],"version-history":[{"count":4,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/6107\/revisions"}],"predecessor-version":[{"id":6114,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/6107\/revisions\/6114"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media\/6112"}],"wp:attachment":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media?parent=6107"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/categories?post=6107"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/tags?post=6107"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}