<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Learn Ionic Framework - Medium]]></title>
        <description><![CDATA[Learn Ionic &amp; Capacitor 🚀 Guides, tips, and real-world insights to build high-quality mobile apps with Ionic + Capacitor. From basics to advanced — ship faster, smarter, and with less App Store friction. - Medium]]></description>
        <link>https://medium.com/learn-ionic-framework?source=rss----daeb57a79fec---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Learn Ionic Framework - Medium</title>
            <link>https://medium.com/learn-ionic-framework?source=rss----daeb57a79fec---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 13 Nov 2026 22:27:59 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/learn-ionic-framework" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Convert Lovable Apps to iOS and Android Apps]]></title>
            <link>https://medium.com/learn-ionic-framework/convert-lovable-app-to-ios-and-android-apps-1b0b5eb44a78?source=rss----daeb57a79fec---4</link>
            <guid isPermaLink="false">https://medium.com/p/1b0b5eb44a78</guid>
            <category><![CDATA[capacitorjs]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[ios-development]]></category>
            <category><![CDATA[lovable]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <dc:creator><![CDATA[Dayana Jabif]]></dc:creator>
            <pubDate>Tue, 06 Oct 2026 18:00:31 GMT</pubDate>
            <atom:updated>2026-10-06T18:01:05.818Z</atom:updated>
            <content:encoded><![CDATA[<p>You can convert a <a href="https://lovable.dev">Lovable</a> app into native iOS and Android apps with Capacitor and build both in the cloud, so you need neither a Mac nor Xcode nor Android Studio. Lovable itself publishes to the web only, but the code it generates is a standard React + Vite project, which is exactly what <a href="https://capacitorjs.com/">Capacitor</a> wraps into a native app. In this guide, we take a Lovable expense tracker called Spendly from the Lovable editor to a signed app on a real iPhone, add a native camera feature, set up the Apple Developer and Google Play accounts and signing certificates, and push a fix over the air with <a href="https://capawesome.io/cloud/">Capawesome Cloud</a> Live Updates.</p><p><strong>No prior mobile experience required: every command and tool is explained as if you’ve never opened a terminal.</strong></p><p><em>This post was originally published at </em><a href="https://capawesome.io/blog/convert-lovable-app-to-mobile-app/"><em>https://capawesome.io </em></a><em>on June 26, 2026.</em></p><p>This post has a companion video that walks through the entire process in real time, including the parts where things break and how to fix them:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttps%2Fwww.youtube.com%2Fembed%2F_5l-wiVYkVY%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttps%2Fwww.youtube.com%2Fwatch%3Fv%3D_5l-wiVYkVY&amp;image=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttps%2Fi.ytimg.com%2Fvi%2F_5l-wiVYkVY%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="640" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/605b1b91695cd22fa7d01f82ac8707e8/href">https://medium.com/media/605b1b91695cd22fa7d01f82ac8707e8/href</a></iframe><p><strong>Key takeaways:</strong></p><ul><li>Lovable only publishes to the web, but its code is a normal web app, and Capacitor turns a web app into iOS and Android apps without rewriting it.</li><li>You don’t need a Mac, Xcode or Android Studio: Capawesome Cloud builds the iOS and Android apps for you in 2–5 minutes, from Windows, Linux or macOS.</li><li>Ask Lovable for a single-page app: new Lovable apps use server-side rendering by default since May 13, 2026, and a native app needs a plain static build.</li><li>Once the app is on phones, small fixes go out over the air in minutes with Live Updates; only new native features like the camera need a new build and store review.</li><li>Publishing costs $99 per year for Apple and $25 one-time for Google Play, and you can do the whole guide on the free 14-day Capawesome Cloud trial.</li></ul><h3>What You’ll Build</h3><p>To keep things concrete, we’ll use a sample app called Spendly, a mobile-first expense tracker built with Lovable. It lets you add expenses, see a running total, and (once we add the camera) snap a photo of a receipt when logging a transaction.</p><p>The steps apply to every Lovable app; Spendly is only the example.</p><p>By the end, you’ll have:</p><ul><li>A native iOS and Android app built entirely in the cloud: no Mac, no Xcode, no Android Studio required</li><li>The iOS app installed and running on a real iPhone device</li><li>The Android app installed and running on a real Android device</li><li>iOS and Android developer accounts configured to submit your app for review in the App Store and Google Play Store</li><li>A working camera feature that only a real native app can offer</li><li>Live Updates set up, so you can ship changes without going through app review every time, including a real fix we’ll push over the air</li></ul><h3>Build iOS and Android Apps Without a Mac</h3><p>The traditional way to build a mobile app requires a Mac with Xcode for iOS and a fully configured Android Studio for Android. That’s a huge amount of setup, and if you’re on Windows or Linux, iOS is off the table.</p><p>We’re going to skip almost all of that. <a href="https://capawesome.io/cloud/native-builds/">Capawesome Cloud Native Builds</a> builds your iOS and Android apps on Apple computers in the cloud, signs them, and hands you back an installable app in a few minutes, from any operating system.</p><p>That changes the prerequisites dramatically:</p><ul><li><strong>You do <em>not</em> need Xcode or Android Studio</strong> to build and ship your app. The cloud does it.</li><li><strong>You <em>only</em> need them if you want a simulator</strong>, a virtual phone that runs on your computer’s screen. That’s optional, and (fair warning) it’s a lot more setup. We’ll point out where it fits in, but the main path in this guide never touches them.</li></ul><p>Check the <a href="https://capawesome.io/blog/convert-lovable-app-to-mobile-app/#prerequisites">Prerequisites</a> to see what you need before you start.</p><h3>Step 1: Build Your App in Lovable</h3><p>If you already have a Lovable app, skip to Step 2. If you’re starting fresh, here’s how Spendly was created.</p><p><a href="https://lovable.dev">Lovable</a> is an AI app builder. You describe the app you want in plain English, and it generates a working React app you can preview and refine in your browser, no coding required.</p><p>Here’s the <a href="https://capawesome.io/docs/assets/images/posts/convert-lovable-app-to-mobile-app/lovable-prompt/">exact prompt</a> we used to generate Spendly.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*fBdzqOA5pu-3i8-w.png" /></figure><p>Keep it a simple single-page app</p><p>For the smoothest path to mobile, explicitly ask Lovable for a single-page app, like the prompt above does. New Lovable apps are server-rendered by default, and asking for a single-page app is what gets you the dist folder Capacitor wraps into a native app.</p><p>✅ <strong>Success:</strong> Your app previews and works inside the Lovable editor.</p><h3>Step 2: Export to GitHub</h3><p>To work with your app on your own computer (and so Capawesome Cloud can build from it later), you first need the code in a GitHub repository. Lovable can push it there for you.</p><ol><li>In the Lovable editor, click the <strong>Upgrade</strong> button in the top-right corner.</li><li>Click <strong>Git</strong> on the left menu and then the <strong>Github</strong> option.</li><li>Authorize Lovable (create a free GitHub account here if you don’t have one).</li><li>Link your github account to this Lovable project.</li><li>Lovable will create a new repository and push your app into it automatically.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*sBkTZm86ChsX5oNN.png" /></figure><p>After it finishes, you’ll have a repo at an address like github.com/YOUR-USERNAME/spendly.</p><p>If you got lost here, watch the video for the detailed step by step.</p><p>✅ <strong>Success:</strong> Visiting github.com/YOUR-USERNAME/spendly shows your app&#39;s code.</p><h3>Step 3: Run Your App Locally</h3><p>Now download the code to your computer and make sure it runs. “Cloning” means copying the repository (the project on GitHub) onto your machine.</p><p>Open VS Code, start a terminal with <strong>Terminal → New Terminal</strong>, and run these one at a time (replace YOUR-USERNAME):</p><pre>git clone https://github.com/YOUR-USERNAME/spendly.git <br>cd spendly <br>npm install <br>npm run dev</pre><ul><li>git clone ...: downloads your code into a new spendly folder.</li><li>cd spendly: moves into that folder.</li><li>npm install: downloads all the libraries your app depends on.</li><li>npm run dev: runs the app on your computer so you can open it in a browser.</li></ul><p>Then open the project in VS Code: <strong>File → Open Folder</strong>, select the spendly folder. Any new terminal you open is already inside it, so you can skip cd spendly from here on.</p><p>The terminal prints a local address. Open it in your browser. Lovable apps typically run on http://localhost:8080, but use whatever address your terminal shows (it may differ).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*UtrFKOY4X_XT2CoE.png" /></figure><p>✅ <strong>Success:</strong> Spendly opens in your browser showing its UI.</p><p>Press Ctrl + C in the terminal to stop the app when you&#39;re ready to continue.</p><h3>Step 4: Add Capacitor to Your Lovable App</h3><p>Capacitor is the bridge that turns your web app into a real native mobile app. It wraps your existing code in an iOS and Android shell, no rewrite needed.</p><p>Install Capacitor and set it up:</p><pre>npm install @capacitor/core @capacitor/cli <br>npx cap init</pre><p>npx cap init asks three questions. Answer them like this:</p><p><strong>App Package ID</strong>com.spendly.app</p><p>A unique ID for your app, written like a web address in reverse (your website’s domain, then the app name). It can’t be changed after you publish to the stores.</p><p><strong>Web assets directory</strong></p><p>The folder your built app lands in. <strong>For Lovable single-page apps this is </strong><strong>dist.</strong></p><p>This creates capacitor.config.ts:</p><p>Pick a Package ID you own</p><p>Your Package ID (Apple calls it the bundle ID, Google the application ID) must be unique across the App Store and Google Play, so two apps can never share one. In the companion video we picked one that was already taken and had to change it later, which means editing it in several files inside ios/ and android/ and rebuilding. Save yourself the detour: base it on a domain you own (e.g. com.yourcompany.spendly) from the start.</p><p>Now build your web app, add the iOS and Android projects, and copy the app into them:</p><pre>npm run build <br>npm install @capacitor/ios @capacitor/android <br>npx cap add ios<br>npx cap add android <br>npx cap sync</pre><ul><li>npm run build produces the dist/ folder (Capacitor needs it before you add the platforms).</li><li>npx cap add ios / android create the ios/ and android/ folders, each a complete native project.</li><li>npx cap sync copies your built web app into both. You&#39;ll run it again after every change.</li></ul><p>Your project now looks roughly like this:</p><pre>spendly/<br>├── android/          ← native Android project<br>├── ios/              ← native iOS project<br>├── dist/             ← your built web app<br>├── src/              ← your Lovable app code<br>├── capacitor.config.ts<br>└── package.json</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/618/0*--E7yWCmcx393-Yy.png" /></figure><p>No CocoaPods needed</p><p>If you’ve followed older Capacitor tutorials, you may have seen a step to install a tool called CocoaPods for iOS. You don’t need it. Since Capacitor 8, iOS dependencies are handled automatically by <a href="https://capawesome.io/blog/how-to-migrate-a-capacitor-app-to-spm/">Swift Package Manager</a>, which comes with the project.</p><p>✅ <strong>Success:</strong> ios/ and android/ folders appear, and the terminal shows Sync finished.</p><h3>Step 5: Check .gitignore</h3><p>Capawesome Cloud builds from your GitHub repository, which means the ios/ and android/ folders must be uploaded to GitHub. A .gitignore file lists what Git should leave out of the upload, and a common mistake is accidentally listing those folders there.</p><p>npx cap add already put a .gitignore inside each platform folder that leaves out only temporary build files, not the project itself, so you usually don&#39;t need to change anything. Confirm:</p><ul><li>The .gitignore in your project&#39;s main folder lists node_modules and dist (the cloud rebuilds dist itself, so it doesn&#39;t belong on GitHub). Lovable&#39;s default already does this.</li><li>The ios/ and android/ folders are not listed. They need to be on GitHub.</li></ul><p>✅ <strong>Success:</strong> Running git status shows the new ios/ and android/ folders as ready to upload (not ignored).</p><h3>Step 6: Commit and Push</h3><p>Upload this milestone to GitHub so the cloud can build from it ( commit records the change, push uploads it):</p><pre>git add .<br>git commit -m &quot;Add Capacitor and native iOS/Android platforms&quot;<br>git push</pre><p>✅ <strong>Success:</strong> Your GitHub repo now shows the ios/ and android/ folders.</p><h3>Step 7: Connect Capawesome Cloud</h3><p>Everything in this section is done in the Capawesome Cloud Console, with no terminal needed.</p><ol><li><strong>Sign up and create an organization.</strong> Go to <a href="https://console.cloud.capawesome.io">console.cloud.capawesome.io</a> and create an <strong>organization</strong> (your workspace). All plans include a <strong>14-day free trial</strong>.</li><li><strong>Create an app.</strong> On the <a href="https://console.cloud.capawesome.io/organizations/_/apps">Apps</a> page, select your organization, click <strong>Create App</strong>, give it a name (e.g. Spendly), and click <strong>Create</strong>. Open the app and copy its app ID. You&#39;ll paste it into your config when we set up Live Updates.</li><li><strong>Connect your GitHub repository.</strong> Open the <a href="https://console.cloud.capawesome.io/apps/_/git">Git</a> page for your app.</li></ol><ul><li>Under <strong>Git Providers</strong>, select <strong>GitHub</strong> and click <strong>Connect</strong> to authorize access.</li><li>Under <strong>Git Repositories</strong>, choose the repository owner, select your spendly repo, and click <strong>Save</strong>.</li></ul><p>For the full connection flow and permissions, see the <a href="https://capawesome.io/docs/cloud/integrations/github/">GitHub integration docs</a>.</p><p>✅ <strong>Success:</strong> Your app in Capawesome Cloud shows your GitHub repo connected, and you have your app ID saved.</p><h3>Step 8: Create Developer Accounts</h3><p>To install on a real iPhone and to publish, you need developer accounts. This is a one-time setup with real timelines. Start it early.</p><h3>Apple Developer Program: $99/year</h3><p>Enroll at <a href="https://developer.apple.com/programs/enroll/">developer.apple.com/programs/enroll</a> for $99 per year. Individual accounts are usually approved within two days. Registering as a company also needs a D-U-N-S number, a free business identifier from Dun &amp; Bradstreet that takes about a week to get.</p><h3>Google Play Console: $25 one-time</h3><p>Register at <a href="https://play.google.com/console/signup">play.google.com/console/signup</a> for a one-time $25 fee. Identity verification usually completes within a few hours.</p><p>Full walkthrough: <a href="https://capawesome.io/blog/how-to-create-apple-developer-and-google-play-accounts/">How to Create Your Apple Developer and Google Play Developer Accounts</a>.</p><p>✅ <strong>Success:</strong> Your Apple Developer account is active (and Google Play, if you’re targeting Android).</p><h3>Step 9: Generate Signing Certificates</h3><p>Apple and Google only accept signed apps, and iOS won’t install an unsigned build on a real device either. Signing is a digital stamp that proves the app comes from you, and each platform has its own files for it:</p><ul><li><strong>iOS:</strong> a certificate (the stamp itself) plus a provisioning profile (a list of which app, and which devices, that stamp may be used for). You need one pair for installing on your own iPhone (called <em>development</em>) and one pair for TestFlight and the App Store (called <em>distribution</em>). Both are created the same way.</li><li><strong>Android:</strong> a single keystore file that holds the stamp.</li></ul><p>This is where most first-timers get stuck, but you can create everything in your browser, no Xcode or Android Studio required:</p><p>Then upload them to Capawesome Cloud once, in the Console:</p><ol><li>Open your app and go to the <strong>Certificates</strong> page.</li><li>Click <strong>Create Certificate</strong>, choose the platform, and upload the files:</li></ol><ul><li><strong>iOS:</strong> your .p12 certificate (with its password) and your .mobileprovision provisioning profile.</li><li><strong>Android:</strong> your keystore file (with its keystore password, key alias, and key password).</li></ul><p>3. Give it a recognizable name (e.g. Production iOS Certificate) and save.</p><p>Every future build picks the certificate up automatically, so you store nothing on your machine.</p><p>Step-by-step guides:</p><ul><li><a href="https://capawesome.io/docs/cloud/native-builds/certificates/ios/">iOS signing certificates</a></li><li><a href="https://capawesome.io/docs/cloud/native-builds/certificates/android/">Android signing certificates</a></li><li><a href="https://capawesome.io/blog/ios-certificates-and-provisioning-profiles-explained/">iOS Certificates and Provisioning Profiles Explained</a>.</li></ul><p>Remember that in the video this is shown step by step.</p><p>Every iPhone has a unique identifier called a UDID. Look yours up with the free <a href="https://capawesome.io/tools/ios-udid-finder/">iOS UDID Finder</a>, register it in your Apple Developer account, and include it in the development provisioning profile. That lets you install a development build directly on your phone. The easiest alternative is TestFlight, set up in Step 12.</p><p>✅ <strong>Success:</strong> Your certificates are uploaded to Capawesome Cloud.</p><h3>Step 10: Build Your Native App in the Cloud</h3><p>Start a cloud build straight from the connected repository, all from the Console:</p><ol><li>Open your app and go to the <strong>Builds</strong> page.</li><li>Click <strong>Build from Git</strong>.</li><li>Select your <strong>Git reference</strong> (the main branch, which is the version of your code the cloud should build), the <strong>Platform</strong> (iOS or Android), and the <strong>Build Type</strong>:</li></ol><ul><li><strong>iOS → Development</strong> (signed with your iOS <em>development</em> certificate, with your iPhone included in the provisioning profile): to install directly on your own device.</li><li><strong>iOS → App Store</strong> (signed with your iOS <em>distribution</em> certificate): for TestFlight and the App Store (you can’t install this one straight onto a device).</li><li><strong>Android → Release</strong> (signed with your Android keystore): for Google Play. For a quick test on any Android device, <strong>Android → Debug</strong> needs no certificate.</li></ul><p>4. Pick the matching <strong>certificate</strong>, then click <strong>Build</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/0*NLekk2nJj882IChT.png" /></figure><p>Builds typically finish in 2–5 minutes. When a build fails, the Console’s <a href="https://capawesome.io/docs/cloud/assist/">Ask AI</a> explains the cause and a fix in plain English.</p><p>Want a free, unsigned build to try first?</p><p>On the <strong>Build Type</strong> dropdown, choose <strong>iOS Simulator</strong> or <strong>Android Debug</strong>. Neither needs a certificate. The iOS one only runs in a virtual iPhone, and the Android one installs on any Android phone, so they’re a good first end-to-end test. Full reference: <a href="https://capawesome.io/docs/cloud/native-builds/setup/">Getting Started with Native Builds</a>.</p><p>Watch the full Console walkthrough for each platform:</p><p>✅ <strong>Success:</strong> Your build completes in the Console with a downloadable app file (an IPA for iOS, an APK or AAB for Android).</p><h3>Step 11: Install the App on Your iPhone</h3><p>Time to hold Spendly in your hand. The simplest paths, all without Xcode:</p><ul><li><strong>TestFlight (iOS):</strong> push the build to TestFlight from Capawesome Cloud <a href="https://capawesome.io/cloud/app-store-publishing/">App Store Publishing</a>, then install it from the TestFlight app on your iPhone. Internal testers don’t wait for review.</li><li><strong>Direct install:</strong> install a development build straight onto a registered device from the Capawesome Cloud Console.</li><li><strong>Google Play Internal Testing (Android):</strong> share a link and testers install from the Play Store immediately, no review.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Ar-Z1bLsAUdu-v2-.png" /></figure><p>Full guide: <a href="https://capawesome.io/blog/how-to-distribute-ios-and-android-apps-to-testers/">How to Distribute iOS and Android Apps to Testers</a>. Console walkthrough:</p><p>Prefer a local simulator/emulator? (the heavier path)</p><p>If you’d rather test in a virtual phone on your computer, you <em>can</em> install <a href="https://apps.apple.com/app/xcode/id497799835">Xcode</a> (Mac only) and/or <a href="https://developer.android.com/studio">Android Studio</a>, then run npx cap open ios / npx cap open android and press the Run button. Be warned: these are large downloads and a lot more configuration. The cloud + real-device path above is faster and works on any OS, which is why it&#39;s our main recommendation.</p><p>✅ <strong>Success:</strong> Spendly launches on your iPhone.</p><h3>Step 12: Deploy to Testers</h3><p>Installing on your own phone is great, but to get the app to other testers you send it to a store destination: TestFlight on iOS or a Google Play testing track on Android. You set the destination up once in the Console and then deploy builds to it.</p><p>This is walked through end-to-end in the companion video</p><p>Creating both destinations involves a fair amount of clicking through Apple and Google’s consoles. The <a href="https://youtu.be/_5l-wiVYkVY">companion video</a> demonstrates the whole flow in real time, including the credentials, a couple of errors, and the fixes. This section is the written map; the linked docs below have the click-by-click detail.</p><p>The two-step pattern is the same for both platforms:</p><ol><li><strong>Create a store destination</strong> (the target + its credentials).</li><li><strong>Create a deployment</strong> of a signed build to that destination.</li></ol><h3>TestFlight (iOS)</h3><p>Create an <strong>Apple App Store</strong> destination on the <strong>Destinations</strong> page of your app. Using the Apple ID + Password method, you&#39;ll provide:</p><ul><li><strong>Team ID</strong>: from your Apple Developer Membership details.</li><li><strong>Apple App ID</strong>: the <em>Apple ID</em> property from the <strong>App Information</strong> section in App Store Connect (create the app there first, using your registered bundle ID).</li><li><strong>Apple ID</strong> + an <strong>app-specific password</strong>: a separate password Apple lets you create for tools like this one, on your <a href="https://appleid.apple.com">Apple ID account page</a>.</li></ul><p>Then create an <strong>iOS → App Store</strong> build signed with your distribution certificate and deploy it to that destination. Submissions are uploaded to TestFlight automatically. (You can also tick the deploy option on the build itself so a successful build ships to TestFlight in one go.)</p><p>Full detail: <a href="https://capawesome.io/docs/cloud/app-store-publishing/destinations/apple-app-store/">Apple App Store &amp; TestFlight Destination</a>.</p><h3>Google Play Internal Testing (Android)</h3><p>Create a <strong>Google Play Store</strong> destination with:</p><ul><li><strong>Track</strong>: Internal for internal testing.</li><li><strong>Package Name</strong>: your Android application ID (the same bundle ID).</li><li><strong>Release Status</strong>: Draft for the very first release (lets you finish setup in the console before it goes live).</li><li><strong>JSON Key File</strong>: a file that lets Capawesome Cloud upload to Google Play on your behalf. You create it in the Google Cloud Console as a “service account”, then invite that account as a user in the Google Play Console and give it release permissions.</li></ul><p>Then create an <strong>Android → Release</strong> build (Google Play rejects <strong>Debug</strong> builds) and deploy it to the destination. It appears under <strong>Testing → Internal testing</strong> in the Google Play Console, where you add tester emails.</p><p>Full detail: <a href="https://capawesome.io/docs/cloud/app-store-publishing/destinations/google-play-store/">Google Play Store Destination</a>.</p><p>For the bigger picture (automatic submissions after a build, all tracks, and Firebase App Distribution), see <a href="https://capawesome.io/docs/cloud/app-store-publishing/setup/">Getting Started with App Store Publishing</a> and our <a href="https://capawesome.io/blog/how-to-distribute-ios-and-android-apps-to-testers/">How to Distribute iOS and Android Apps to Testers</a> guide.</p><p>✅ <strong>Success:</strong> Your build is live on TestFlight and/or the Google Play Internal track, and your testers have been invited.</p><h3>Step 13: Add a Native Feature: The Camera</h3><p>A Capacitor plugin is a small add-on that lets your app’s code use a real phone feature: camera, fingerprint or face unlock, location, and <a href="https://capawesome.io/docs/sdks/capacitor/">50+ more</a>. This is what separates a real native app from a website in a wrapper.</p><p>We’ll add the <a href="https://capacitorjs.com/docs/apis/camera">Camera plugin</a> so users can photograph a receipt when adding an expense. If you later want to crop that receipt photo or shrink it before upload, <a href="https://capawesome.io/blog/how-to-take-and-edit-photos-in-a-capacitor-app/">How to Take and Edit Photos in a Capacitor App</a> covers the plugins for that.</p><pre>npm install @capacitor/camera &amp;&amp; npx cap sync</pre><h3>Declare Camera Usage</h3><p>Both platforms require you to declare <em>why</em> your app uses the camera, or it crashes when the camera opens. You only do this once.</p><p><strong>iOS</strong>: open ios/App/App/Info.plist and add inside the top-level &lt;dict&gt;:</p><p>ios/App/App/Info.plist</p><pre>&lt;key&gt;NSCameraUsageDescription&lt;/key&gt;<br>&lt;string&gt;Spendly uses the camera to let you photograph receipts.&lt;/string&gt;</pre><p><strong>Android</strong>: open android/app/src/main/AndroidManifest.xml and add inside the &lt;manifest&gt; tag:</p><p>android/app/src/main/AndroidManifest.xml</p><pre>&lt;uses-permission android:name=&quot;android.permission.CAMERA&quot; /&gt;</pre><h3>Use the Camera in Your App</h3><p>Open the file that holds your “Add Transaction” form (it lives somewhere under src/; ask Lovable which file if you&#39;re unsure), and add this function plus a button:</p><p><strong>Capacitor handles the permission dialog</strong></p><p>You don’t write any code to ask for camera access. The first time a user taps the button, Capacitor shows the system “Allow camera access?” prompt, using the message you wrote in Info.plist.</p><p>✅ <strong>Success:</strong> Your code calls the Camera plugin and the project syncs without errors.</p><p><strong>Hundreds more plugins, including Capawesome Insiders SDKs</strong></p><p>The camera is one example. Capawesome maintains a large library of <a href="https://capawesome.io/docs/sdks/capacitor/">free, open-source Capacitor plugins</a>, and for more advanced needs there’s <a href="https://capawesome.io/insiders/">Capawesome Insiders</a>: premium, production-ready SDKs built and maintained by official Ionic Developer Experts, with priority support. Insiders covers native features like <a href="https://capawesome.io/docs/sdks/capacitor/nfc/">NFC</a>, <a href="https://capawesome.io/docs/sdks/capacitor/biometrics/">Biometrics</a>, <a href="https://capawesome.io/docs/sdks/capacitor/bluetooth-low-energy/">Bluetooth Low Energy</a>, and <a href="https://capawesome.io/docs/insiders/">more</a>. Most Capawesome Cloud plans already include a couple of Insider SDKs.</p><h3>Step 14: Add Live Updates (OTA)</h3><p>Normally, every change to a native app (even a one-word typo fix) has to go through app store review, which can take days. <a href="https://capawesome.io/cloud/live-updates/">Capawesome Cloud Live Updates</a> let you push changes to the web part of your app (the screens, styling, logic and images Lovable generated) over the air, straight to users’ devices in minutes, with no review required.</p><p><strong>Add the plugin in your first release</strong></p><p>Adding a plugin requires a fresh native build and another store review. So install Live Updates now, before you have updates to ship. That way you’re never stuck waiting on review when you need to push a fix. (We’ll use exactly this capability in Step 16.)</p><p>Install and configure the plugin:</p><pre>npm install @capawesome/capacitor-live-update@latest<br>npx cap sync</pre><p>Add the plugin settings to capacitor.config.ts, pasting in the app ID you copied in Step 7:</p><pre>import type { CapacitorConfig } from &#39;@capacitor/cli&#39;;<br><br>const config: CapacitorConfig = {<br>  appId: &#39;com.spendly.app&#39;,<br>  appName: &#39;Spendly&#39;,<br>  webDir: &#39;dist&#39;,<br>  plugins: {<br>    LiveUpdate: {<br>      appId: &#39;00000000-0000-0000-0000-000000000000&#39;,<br>      autoUpdateStrategy: &#39;background&#39;,<br>      readyTimeout: 10000,<br>      autoBlockRolledBackBundles: true,<br>    },<br>  },<br>};<br><br>export default config;</pre><ul><li>autoUpdateStrategy: &#39;background&#39;: the app checks for updates when it opens, downloads them silently, and applies them the next time it opens. No prompts, no extra code.</li><li>readyTimeout + autoBlockRolledBackBundles: safety nets that <a href="https://capawesome.io/docs/cloud/live-updates/rollbacks/">automatically undo</a> a broken update, so a bad release can&#39;t leave users with an app that won&#39;t start.</li></ul><p>A quick word on channels: a <a href="https://capawesome.io/docs/cloud/live-updates/channels/">channel</a> is like a named mailbox for updates. Each installed app checks one mailbox, and you can use different ones for different audiences, for example staging for testers and production for everyone else. We&#39;re not setting one here, so the plugin uses your app&#39;s built-in default channel, which is where we&#39;ll deliver the update in Step 16.</p><p>The safety net needs your app to report “I started fine” as early as possible, which is what ready() does. In a Lovable app, open src/main.tsx and add near the top:</p><pre>import { LiveUpdate } from &#39;@capawesome/capacitor-live-update&#39;;<br><br>void LiveUpdate.ready();</pre><p>Then sync:</p><pre>npx cap sync</pre><p>✅ <strong>Success:</strong> The Live Update plugin is installed, configured with your app ID, and ready() is called on startup.</p><h3>Step 15: Rebuild the Native App in the Cloud</h3><p>We added two plugins (Live Update and Camera) and a new permission. Those are native changes, so they need a fresh native build. A Live Update alone can’t deliver them. First commit and push your changes:</p><pre>git add .<br>git commit -m &quot;Add Live Updates and Camera plugin&quot;<br>git push</pre><p>Then trigger a new build exactly like in Step 10: in the Console, open the <strong>Builds</strong> page → <strong>Build from Git</strong> → select main, your platform, the signed build type, and your certificate → <strong>Build</strong>.</p><p>Install this new build on your iPhone (TestFlight or direct install, as in Step 11). Your phone now runs a version of the app that includes the camera and can receive live updates.</p><p>✅ <strong>Success:</strong> The updated build with the camera installs and runs on your iPhone.</p><h3>Step 16: Fix the Status Bar via Live Update</h3><p>Look closely at the app on your iPhone. There’s a good chance the very top, your header or title, is tucked underneath the status bar (the clock and battery), or behind the notch. The bottom looks fine; the top is cut off.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/0*p5endSWfuMtgOsJZ.png" /></figure><p>This happens because Capacitor draws your app across the <em>entire</em> screen, including behind the status bar and the notch. The part of the screen those cover is called the safe area, and the phone tells your app how big it is through built-in CSS values named env(safe-area-inset-top), -bottom, -left and -right. Your app has to add that much space itself.</p><p>Why the bottom often looks right but the top doesn’t</p><p>Many Lovable apps already add env(safe-area-inset-bottom) at the bottom, so that side is handled. The top headers usually use a fixed amount of space (like pt-6) that ignores the safe area, so they slip under the status bar.</p><p>First, confirm the &lt;meta name=&quot;viewport&quot;&gt; line in index.html includes viewport-fit=cover (Lovable apps usually already do; it&#39;s what switches the safe-area values on):</p><pre>&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1, viewport-fit=cover&quot; /&gt;</pre><p>Then add the safe-area space to the top of each page header. The trick is max(): keep the original spacing in the browser, and grow to the safe area on phones that need it:</p><pre>- &lt;header className=&quot;... px-5 pt-6 pb-2&quot;&gt;<br>+ &lt;header className=&quot;... px-5 pt-[max(1.5rem,env(safe-area-inset-top))] pb-2&quot;&gt;</pre><p>Do this for each screen’s top header. If a header has a colored or gradient background, this is exactly what you want: the background still fills the screen edge-to-edge, and only the <em>content</em> shifts down below the status bar.</p><p><strong>Let Lovable do the edit</strong></p><p>You can ask Lovable: <em>“The app content runs under the status bar at the top on mobile. Add </em><em>env(safe-area-inset-top) to the top padding of each page header using </em><em>max(), keeping the existing padding as the minimum.&quot;</em></p><h3>Ship the Fix with a Web Build</h3><p>This fix only touches styling (no new plugin, nothing native), so we can push it straight to the installed app without a new native build or a trip through app review.</p><p>A live update is created with a <strong>Web Build</strong>. It works exactly like the iOS and Android builds you already did, except you pick <strong>Web</strong> as the platform. It’s the same Builds page, fully in the Console, no terminal.</p><p>First, push your fix to GitHub so the cloud can build from it:</p><pre>git add .<br>git commit -m &quot;Fix top safe area&quot;<br>git push</pre><p>Then, in the Console:</p><ol><li>Open the <strong>Builds</strong> page and click <strong>Build from Git</strong>.</li><li>Select your main branch and choose <strong>Web</strong> as the <strong>Platform</strong>, then click <strong>Build</strong>. (Web builds run your npm run build in the cloud in a few seconds.)</li><li>When it finishes, <strong>deploy</strong> that build to your app’s default channel. Since we didn&#39;t set up a custom channel in Step 14, that&#39;s the one your installed app checks automatically.</li></ol><p>You can watch it on the <a href="https://console.cloud.capawesome.io/apps/_/deployments">Deployments</a> page, and roll back to a previous build from there anytime.</p><p>Channels are how the right update reaches the right app</p><p>A web build is deployed to a channel, and each installed app checks one channel. Every app comes with a default channel, which is what we use here. Once you have real users on several app versions, <a href="https://capawesome.io/docs/cloud/live-updates/channels/#versioned-channels">versioned channels</a> make sure each update only reaches the app versions it <a href="https://capawesome.io/docs/cloud/live-updates/binary-compatible-changes/">works with</a>. (See also <a href="https://capawesome.io/blog/announcing-capawesome-cloud-web-builds/">Web Builds</a>.)</p><p>Watch the full Live Updates Console walkthrough:</p><p><a href="https://youtu.be/rF1yxzR8tnE">https://youtu.be/rF1yxzR8tnE</a></p><p>Full guides:</p><ul><li><a href="https://capawesome.io/docs/cloud/live-updates/setup/">Getting Started with Live Updates</a></li><li><a href="https://capawesome.io/blog/capacitor-live-updates-guide/">Capacitor Live Updates: The Complete Guide to OTA Updates</a></li></ul><p><strong>Force-close to trigger the update during testing:</strong></p><p>With the background setting from Step 14, the app checks for updates when it opens (and when you come back to it, if the last check was over 15 minutes ago). While testing, fully close and reopen the app, wait ~15–30 seconds, then open it once more to see the change applied.</p><p>✅ <strong>Success:</strong> The header now sits below the status bar, fixed on your device without rebuilding the native app or going through review.</p><h3>Step 17: Prepare Your App Store Listing</h3><p>Your app is built, installable, and you can already push instant updates. What remains before it goes live on the public stores is mostly paperwork. Apple and Google both want a complete listing before you can submit: an icon, screenshots (Apple insists on iPhone 6.9-inch captures), a name and description, a privacy policy URL even for free apps, an age rating, and the data-collection disclosures. <a href="https://capawesome.io/blog/how-to-prepare-your-app-store-listing/">How to Prepare Your App Store Listing</a> walks through each item with the exact sizes.</p><h3>What’s Left to Submit</h3><p>This guide got you all the way to a signed, installable app with live updates wired in. To publish, you still need to:</p><ol><li><strong>Complete Google Play’s closed testing period</strong> (personal accounts created after Nov 13, 2023): at least 12 testers for 14 consecutive days before you can request production access. iOS has no equivalent. <a href="https://capawesome.io/blog/11-steps-to-get-your-web-app-on-the-app-store/#step-8-complete-google-plays-closed-testing-period">Details here</a>.</li><li><strong>Submit for review.</strong> In App Store Connect, assign your build and click Submit for Review (Apple review: ~3–5 days). For Google Play, apply for production access after closed testing (review: ~3–7 days). Capawesome Cloud <a href="https://capawesome.io/cloud/app-store-publishing/">App Store Publishing</a> can automate both submissions with one click, or automatically on every successful build via <a href="https://capawesome.io/docs/cloud/automations/setup/">Automations</a>.</li></ol><p>Our companion guide covers this end of the journey in full detail: <a href="https://capawesome.io/blog/11-steps-to-get-your-web-app-on-the-app-store/">Convert a Web App to a Mobile App in 11 Steps</a>.</p><h3>Common Errors and Fixes</h3><p>Setting this up for the first time almost always involves a little back-and-forth. Several of these came up live in the companion video, which is a good thing, because you get to see exactly how to fix them. Here are the ones you’re most likely to hit:</p><ul><li><strong>Could not find the web assets directory: ./dist</strong> (when running npx cap add or npx cap sync). You ran the command before building. Run npm run build first so the dist/ folder exists, then retry. If your app builds into a folder with a different name, make sure webDir in capacitor.config.ts matches it.</li><li><strong>“This App ID … is not available” / bundle ID already taken</strong> (registering the App ID in Apple). Bundle IDs are globally unique. Pick a reverse-domain ID based on a domain you control (e.g. com.yourcompany.spendly).</li><li><strong>iOS build fails after changing the bundle ID.</strong> If you change the bundle ID in Apple but not in your project (or vice versa), they no longer match and the build fails. The bundle ID in your native project must equal the App ID registered in Apple. Find-and-replace it across ios/ and android/, commit, and rebuild.</li><li><strong>“Google Play Android Developer API has not been used in project … or it is disabled.”</strong> Open the link in the error to the Google Cloud Console, enable the API, wait a moment, and re-run the deployment.</li><li><strong>“APK has been signed in debug mode.”</strong> Google Play won’t accept a debug-signed build. Create an <strong>Android → Release</strong> build signed with your keystore, then deploy that.</li><li><strong>Deployment rejected: version already exists.</strong> Both stores reject a build whose version number they already have. Increase your app’s version number, create a new build, and deploy that one. To have the number increase on its own, see <a href="https://capawesome.io/blog/introducing-capver/">Introducing CapVer</a>.</li></ul><p>When a <strong>build</strong> fails, the Console keeps full logs, and <a href="https://capawesome.io/docs/cloud/assist/">Ask AI</a> turns the error into a plain-English cause and fix. For deployment issues, see <a href="https://capawesome.io/docs/cloud/app-store-publishing/troubleshooting/">App Store Publishing Troubleshooting</a> and <a href="https://capawesome.io/docs/cloud/live-updates/troubleshooting/">Live Updates Troubleshooting</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*VEOP9IQMvSvrI4Zq.png" /></figure><h3>Can Lovable publish my app to the App Store or Google Play directly?</h3><p>No. Lovable publishes to the web only, as its own <a href="https://lovable.dev/faq/capabilities/mobile/publish-app-store-google-play">mobile FAQ</a> states. To reach the stores, export the code to GitHub, add Capacitor, and build the native iOS and Android apps yourself or in the cloud, which is what this guide does. Your Lovable project stays the single codebase; the native shell is generated around it.</p><h3>My Lovable app is server-rendered. Do I need to rebuild it as a single-page app?</h3><p>Not from scratch, but Capacitor does need a folder with an index.html that contains the whole app, and a server-rendered app doesn&#39;t produce one. Ask Lovable to switch the existing project to a single-page app (or to a static build); it keeps your screens and logic and only changes how the app is packaged. Then point webDir at the folder it produces.</p><h3>Why does my build fail with “Could not find the web assets directory: ./dist”?</h3><p>You ran npx cap add or npx cap sync before building the web app, so the dist/ folder Capacitor expects doesn&#39;t exist yet. Run npm run build first, then retry. Double-check that webDir in capacitor.config.ts matches the folder your build actually produces.</p><h3>Do I have to install Xcode or Android Studio to follow this guide?</h3><p>No, for the main path. The entire build-and-install flow (cloud builds, TestFlight, direct device installs) works without either, since Capawesome Cloud builds on its own Apple computers. Xcode and Android Studio are only needed if you want a virtual phone on your own computer, which the guide calls out as optional and considerably heavier to set up.</p><p>No. Adding a plugin changes the native part of the app, so it needs a fresh native build and a new store submission; a Live Update can only change the web part. That is why the guide installs the Live Update plugin in the very first release: by the time you need to ship a fix, the app already knows how to receive it.</p><p>Because most Lovable-generated apps already add safe-area space at the bottom with env(safe-area-inset-bottom), but top headers typically use a fixed amount of space that ignores the status bar. Since Capacitor draws your app across the whole screen, the header needs the same treatment on top ( max() combined with env(safe-area-inset-top)) that the bottom likely already has.</p><h3>Try Capawesome Cloud</h3><p>Build your Lovable app for iOS and Android in the cloud, push fixes over the air, and submit to the stores from one place, on any operating system.</p><p><a href="https://capawesome.io">Try Capawesome Cloud Free</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mUrTGPOYDqSkLi48H-16pA.png" /></figure><h3>Final Thoughts</h3><p>If your Lovable app is already a single-page app, start at Step 4 and let the cloud handle the native side. If it is server-rendered, switch it to a single-page app first, because nothing else in this guide works until it does.</p><p>Add the Live Update plugin to your very first release, even with nothing to ship yet. Every other feature you can add with a new native build, but a missing Live Update plugin means another store review before you can push your first over-the-air fix.</p><p>From here, finish publishing with the store listing, Google’s closed testing and the submission itself in <a href="https://capawesome.io/blog/11-steps-to-get-your-web-app-on-the-app-store/">Convert a Web App to a Mobile App in 11 Steps</a>, let <a href="https://capawesome.io/docs/cloud/automations/setup/">Automations</a> turn every git push into a build, a store submission and a live update, and browse the <a href="https://capawesome.io/docs/sdks/capacitor/">Capacitor plugin library</a> for biometrics, push notifications and geolocation.</p><p>Got stuck somewhere? The <a href="https://discord.gg/VCXxSVjefW">Capawesome Discord server</a> is active and friendly, so drop your question there. And subscribe to the <a href="https://capawesome.io/newsletter/">Capawesome newsletter</a> to stay up to date on new plugins, Cloud features, and guides like this one.</p><p><em>Originally published at </em><a href="https://capawesome.io/blog/convert-lovable-app-to-mobile-app/"><em>https://capawesome.io</em></a><em> on June 26, 2026.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1b0b5eb44a78" width="1" height="1" alt=""><hr><p><a href="https://medium.com/learn-ionic-framework/convert-lovable-app-to-ios-and-android-apps-1b0b5eb44a78">Convert Lovable Apps to iOS and Android Apps</a> was originally published in <a href="https://medium.com/learn-ionic-framework">Learn Ionic Framework</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[11 Steps to Get Your Web App on the App Store]]></title>
            <link>https://medium.com/learn-ionic-framework/11-steps-to-get-your-web-app-on-the-app-store-5299d80a67d0?source=rss----daeb57a79fec---4</link>
            <guid isPermaLink="false">https://medium.com/p/5299d80a67d0</guid>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[android]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <category><![CDATA[ios-development]]></category>
            <category><![CDATA[devops]]></category>
            <dc:creator><![CDATA[Dayana Jabif]]></dc:creator>
            <pubDate>Wed, 10 Jun 2026 17:46:49 GMT</pubDate>
            <atom:updated>2026-06-10T17:46:51.426Z</atom:updated>
            <content:encoded><![CDATA[<p>You have a web app. Maybe you built it yourself, maybe you vibe-coded it with an AI assistant over a weekend. It works, you like it — and now you want it on the App Store and Google Play.</p><p>The problem is that every tutorial you find was written for people who already live in Xcode and Android Studio. They assume you have a Mac, know what a provisioning profile is, and have configured Gradle before. If you’re coming from the web world — or you’re an indie maker who just shipped a React or Vue app — those guides feel like they start three levels above where you are.</p><p>This guide starts at zero. It covers every step from “I have a web app” to “my app is live on both stores and I can push fixes without waiting for review” — using tools that handle the painful parts for you.</p><p>We’ve walked hundreds of users through this exact process. Here’s everything we’ve learned, in one place.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7SgtjPvDpBewjpD-DOwFOw.png" /><figcaption><strong>11 Steps</strong> to Launch Your App on the App Store</figcaption></figure><h3>Who This Guide Is For</h3><p>This guide is for you if any of these sound familiar:</p><ul><li>You built a web app with React, Next.js, Vue, Angular, Svelte, or any other framework and want to ship it as a native app</li><li>You’re vibe-coding a product with Claude, Cursor, or Copilot and want to reach mobile users</li><li>You have a working app but have no idea how to get it into the App Store</li><li>You’ve been burned by App Store and Google Play Store review delays and want a way to push fixes instantly</li><li>You need to build for iOS but don’t own a Mac</li></ul><p>By the end of this guide you’ll have:</p><ul><li>A native iOS and Android app built from your existing web code</li><li>Both apps live on the App Store and Google Play</li><li>A system to push bug fixes and new features to users in minutes — without app store review</li></ul><h3>Step 1 — Convert Your Web App to Native with Capacitor</h3><p><a href="https://capacitorjs.com/">Capacitor</a> is an open-source runtime that wraps your web app in a native iOS and Android shell. Your code — React, Angular, Vue, Svelte, plain HTML, whatever — runs inside a WebView, and a native bridge connects it to device APIs through plugins.</p><p>This is fundamentally different from React Native or Flutter. There’s no rewrite. No new framework. If you can npm run build your app today, you can have a native version of it running on a phone by the end of this afternoon.</p><h3>Why Not a PWA?</h3><p>Progressive Web Apps are great for some use cases, but they have hard limits: you can’t publish them on the App Store or Google Play, iOS PWAs have persistent bugs with notifications and offline support, and you can’t access device APIs like biometrics, NFC, or Bluetooth. A Capacitor app is a real, store-listed native app — it just happens to be powered by web code.</p><h3>Who Uses Capacitor?</h3><p>Capacitor isn’t a new framework. It’s the runtime behind production apps used by millions of people every day — from indie makers to <a href="https://ionic.io/customers">Fortune 500 companies</a> across fintech, healthcare, logistics, and consumer products. The framework is maintained by the Ionic team, has over 12,000 GitHub stars, and ships regular releases.</p><p>If you’re worried about picking something that gets abandoned: Capacitor is the foundation of an entire ecosystem of tools, services, and companies that depend on it long-term. It’s not going anywhere.</p><h3>Setting Up Capacitor</h3><p>Install Capacitor in your existing web project:</p><pre>npm install @capacitor/core @capacitor/cli<br>npx cap init</pre><p>Add the iOS and Android platforms:</p><pre>npm install @capacitor/ios @capacitor/android<br>npx cap add ios<br>npx cap add android</pre><p>Build your web assets and sync them to the native projects:</p><pre>npm run build<br>npx cap sync</pre><p>That’s it. You now have a ios/ and android/ folder at the root of your project containing full native Xcode and Android Studio projects — pointing at your web build output. Every time you run npx cap sync, Capacitor compiles your web assets and copies them into the native projects, so the app always reflects your latest code.</p><h3>Works With Any Framework</h3><p>Capacitor is genuinely framework-agnostic. The setup is the same whether you use:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/866/1*qphg48BTDmx0Z1VFrmpRRw.png" /><figcaption>Capacitor Works With Any Framework</figcaption></figure><p><strong>Deep-dive guides:</strong> For more specific walkthroughs related to this topic, check the following guides:</p><ul><li><a href="https://capawesome.io/blog/build-mobile-apps-with-any-web-framework-and-capacitor/">Build Mobile Apps with Any Web Framework and Capacitor</a></li><li><a href="https://capawesome.io/blog/how-to-wrap-an-angular-app-with-capacitor-and-firebase/">How to Wrap an Angular App with Capacitor and Firebase</a></li></ul><h3>The Vibe Coding Path: Let an AI Agent Do the Setup</h3><p>If you’re building with an AI coding assistant, install the <a href="https://capawesome.io/skills/">Capawesome Skills</a> to give your agent deep Capacitor knowledge:</p><pre>npx skills add capawesome-team/skills --skill capacitor-app-creation</pre><p>Then prompt your agent (Claude Code, Cursor, Copilot):</p><pre>Use the `capacitor-app-creation` skill to set up Capacitor in my project.</pre><p>The agent will initialize Capacitor, add the platforms, fix your capacitor.config.ts, and sync everything - correctly, on the first try, without you having to know what npx cap sync does.</p><h3>Step 2 — Add Native Features with Plugins</h3><p>A plain Capacitor app renders your web UI on a phone. That’s useful, but the real power comes from connecting your JavaScript code to native device features through plugins.</p><p>Here’s a sample of what’s possible with the <a href="https://capawesome.io/docs/plugins/">Capawesome plugin library</a>:</p><h3>Authentication &amp; Security</h3><p><a href="https://capawesome.io/docs/plugins/biometrics/"><strong>Biometrics Plugin</strong></a> — Add Face ID, Touch ID, and fingerprint authentication to your app. One call to authenticate() handles the platform-specific prompt on both iOS and Android.</p><p><a href="https://capawesome.io/docs/plugins/vault/"><strong>Vault Plugin</strong></a> — Store secrets (tokens, keys, passwords) behind biometric or device-passcode protection. Backed by hardware-level encryption on both platforms.</p><p><a href="https://capawesome.io/docs/plugins/apple-sign-in/"><strong>Apple Sign-In</strong></a><strong> / </strong><a href="https://capawesome.io/docs/plugins/google-sign-in/"><strong>Google Sign-In</strong></a> — Native OAuth flows that look right on every device.</p><p><a href="https://capawesome.io/docs/plugins/audio-player/"><strong>Audio Player</strong></a><strong> / </strong><a href="https://capawesome.io/docs/plugins/audio-recorder/"><strong>Audio Recorder</strong></a> — Record and play back audio with full platform integration. Background playback, lock screen controls, the works.</p><p><a href="https://capawesome.io/docs/plugins/file-picker/"><strong>File Picker</strong></a> — Let users pick files from their device with the native file browser. Returns the file URI or base64 data.</p><h3>Scanning &amp; Recognition</h3><p><a href="https://capawesome.io/docs/plugins/mlkit/barcode-scanning/"><strong>ML Kit Barcode Scanning</strong></a> — On-device barcode and QR code scanning using Google’s ML Kit. No server required.</p><p><a href="https://capawesome.io/docs/plugins/mlkit/document-scanner/"><strong>ML Kit Document Scanner</strong></a> — Let users scan documents with edge detection and automatic cropping, just like a proper scanner app.</p><p><a href="https://capawesome.io/docs/plugins/nfc/"><strong>NFC Plugin</strong></a> — Read and write NFC tags on both Android and iOS.</p><h3>Connectivity</h3><p><a href="https://capawesome.io/docs/plugins/bluetooth-low-energy/"><strong>Bluetooth Low Energy</strong></a> — Connect to BLE peripherals: fitness trackers, IoT devices, medical devices, beacons.</p><p><a href="https://capawesome.io/docs/plugins/wifi/"><strong>WiFi Plugin</strong></a> — Get WiFi state, SSID, and signal strength.</p><h3>Payments &amp; Monetization</h3><p><a href="https://capawesome.io/docs/plugins/purchases/"><strong>Purchases Plugin</strong></a> — In-app purchases and subscriptions via RevenueCat. One SDK, both stores.</p><p><a href="https://capawesome.io/docs/plugins/superwall/"><strong>Superwall Plugin</strong></a> — A/B test paywalls without app updates.</p><h3>Firebase Integration</h3><p>The full <a href="https://capawesome.io/docs/plugins/firebase/">Firebase plugin suite</a> covers Analytics, Authentication, Crashlytics, Cloud Messaging (push notifications), Remote Config, Firestore, Cloud Storage, and more — each as a separate, tree-shakeable package.</p><h3>And Many More</h3><p>Capawesome maintains <a href="https://capawesome.io/docs/plugins/">50+ plugins</a> covering sensors (accelerometer, barometer, pedometer), productivity (contacts, app shortcuts, badge count), printing, screen orientation, speech recognition and synthesis, SQLite, geolocation, and more.</p><p>Can’t find the plugin you need?</p><p>Capawesome offers custom plugin development — the team has built custom Capacitor plugins for dozens of companies. <a href="https://capawesome.io/consulting/">Get in touch.</a></p><h3>Step 3 — Create Your Developer Accounts</h3><p>You need accounts on both platforms before anything can go live. This is a one-time setup, but it has real timelines you need to plan around.</p><h4>Apple Developer Program — $99/year</h4><p>Sign up at <a href="https://developer.apple.com/programs/enroll/">developer.apple.com/programs/enroll</a>. Apple takes up to 48 hours to approve new accounts. If you’re registering as an organization (to publish under a company name rather than your personal name), you’ll also need a D-U-N-S number, which takes 5–7 business days to obtain.</p><p><strong>Start this process first.</strong> It’s the most common cause of delayed launches.</p><h4>Google Play Console — $25 one-time</h4><p>Sign up at <a href="https://play.google.com/console/signup">play.google.com/console/signup</a>. The $25 fee is paid once and your account never expires. Identity verification usually completes within a few hours.</p><p>Full walkthrough: <a href="https://capawesome.io/blog/how-to-create-apple-developer-and-google-play-accounts/">How to Create Your Apple Developer and Google Play Developer Accounts</a></p><h3>Step 4 — Generate Your Signing Certificates</h3><p>Every app submitted to the stores must be cryptographically signed — this is how Apple and Google verify the build came from you. You need:</p><ul><li><strong>iOS:</strong> a distribution certificate + provisioning profile</li><li><strong>Android:</strong> a keystore file</li></ul><p>This is where most first-timers get stuck. The official Apple documentation for code signing is notoriously opaque. The good news: you can generate everything you need directly in your browser, without Xcode or Android Studio.</p><h3>Free Browser Tools</h3><p><a href="https://capawesome.io/tools/ios-certificate-generator/"><strong>iOS Certificate Generator</strong></a> generates iOS development and distribution certificates along with a CSR file — the same thing you’d normally do through Keychain Access on a Mac, but in your browser. No sign-up, nothing leaves your device.</p><p><a href="https://capawesome.io/tools/android-keystore-generator/"><strong>Android Keystore Generator</strong></a> creates a PKCS#12 keystore file for signing your Android app. Fill in the fields, download the file, store it somewhere safe — you’ll need it for every future release.</p><p><a href="https://capawesome.io/tools/ios-udid-finder/"><strong>iOS UDID Finder</strong></a> — if you need to register a test device for development builds, this finds your device UDID from any browser.</p><p>Once you have your certificates, upload them to Capawesome Cloud once. Every subsequent build picks them up automatically — no local keychain required, no credentials in your CI environment variables.</p><ul><li><a href="https://capawesome.io/docs/cloud/native-builds/certificates/ios/">Docs: iOS signing certificates</a></li><li><a href="https://capawesome.io/docs/cloud/native-builds/certificates/android/">Docs: Android signing certificates</a></li></ul><p>For a detailed explanation of what certificates and provisioning profiles actually are:</p><p><a href="https://capawesome.io/blog/ios-certificates-and-provisioning-profiles-explained/">iOS Certificates and Provisioning Profiles Explained</a></p><h3>Step 5 — Build Your Native App in the Cloud</h3><p>Traditionally, building an iOS app requires a Mac with the right version of Xcode. Building a production Android APK requires Android Studio with the right Java and Gradle versions configured. Both need your signing credentials stored locally.</p><p>Capawesome Cloud <a href="https://capawesome.io/cloud/native-builds/">Native Builds</a> eliminates all of that. You connect your Git repository, and the build happens on <strong>Apple Silicon M4 Pro hardware</strong> in the cloud — delivering typical build times of 2–5 minutes. You can trigger builds from Windows, Linux, or a Chromebook. No Mac required.</p><h3>How It Works</h3><p><strong>Step 1: Connect your repository</strong></p><p>Link your GitHub, GitLab, Bitbucket, or Azure DevOps repository to Capawesome Cloud. This is a one-time OAuth authorization.</p><p><strong>Step 2: Trigger a build</strong></p><p>From the Capawesome Cloud Console, choose your branch, select iOS or Android, pick your build type (Debug, Release, Simulator), and hit Build.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*WHUYv-mUqEwSQTdQ.png" /><figcaption>capawesome cloud console</figcaption></figure><p><strong>Step 3: Download or deploy</strong></p><p>When the build completes, download the IPA or APK/ABB directly — or chain it into an App Store Publishing destination with one click.</p><h3>Build From the CLI</h3><p>You can also trigger builds from the terminal with the <a href="https://capawesome.io/docs/cloud/cli/">Capawesome CLI</a>:</p><pre>npx @capawesome/cli apps:builds:create \<br>  --platform ios \<br>  --buildType release</pre><p>This makes it easy to plug Capawesome Cloud into any existing CI pipeline — GitHub Actions, GitLab CI, Bitbucket Pipelines, Jenkins, or anything else.</p><h3>Advanced Features</h3><ul><li><a href="https://capawesome.io/docs/cloud/native-builds/environments/"><strong>Environments</strong></a> — define separate configurations for dev, staging, and production builds</li><li><a href="https://capawesome.io/docs/cloud/native-builds/guides/auto-incrementing-build-numbers/"><strong>Auto-increment build numbers</strong></a> — never manually bump your build number again</li><li><a href="https://capawesome.io/docs/cloud/native-builds/guides/build-without-git/"><strong>Build without Git</strong></a> — upload a ZIP if you don’t want to connect a repository</li><li><a href="https://capawesome.io/docs/cloud/assist/"><strong>Assist — Ask AI</strong></a> — when a build fails, click Ask AI to get a plain-English diagnosis with a suggested fix</li></ul><p>Full setup guide: <a href="https://capawesome.io/docs/cloud/native-builds/setup/">Getting Started with Native Builds</a></p><h3>Step 6 — Distribute to Testers</h3><p>Before going to the public stores, get your app onto real devices. Finding bugs on a physical device — especially iOS — is consistently different from finding them in a simulator.</p><p>Capawesome Cloud App Store Publishing supports all the major testing channels:</p><p><strong>TestFlight (iOS)</strong> — Upload your IPA to TestFlight and invite testers by email. Testers install the app from the TestFlight app. Internal testers (up to 100) skip the review queue; external testers go through a simplified review that usually takes a few hours.</p><p><strong>Google Play Internal Testing</strong> — Share your app via a link immediately after upload, with no review. Testers install it directly from the Play Store.</p><p>You can also install a build directly on a device from the Capawesome Cloud Console without going through any store:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*DiOre3KrGDeTAyTJ.png" /><figcaption>distribute mobile app to testers</figcaption></figure><p>Full guide: <a href="https://capawesome.io/blog/how-to-distribute-ios-and-android-apps-to-testers/">How to Distribute iOS and Android Apps to Testers</a></p><h3>Step 7 — Prepare Your Store Listing</h3><p>This is where most first-timers hit an unexpected wall. The app is built, it works, but you can’t submit it without a complete store listing. Apple and Google require:</p><ul><li><strong>App icon</strong> — 1024×1024px for iOS (no transparency), 512×512px for Google Play</li><li><strong>Screenshots</strong> — Apple now requires iPhone 6.9&quot; (1320×2868px) screenshots; these are mandatory</li><li><strong>App name and description</strong> — Apple gives you 30 characters for the name, 30 for a subtitle, and 100 characters of keywords (comma-separated, don’t repeat what’s in the name)</li><li><strong>Privacy policy URL</strong> — Required by both platforms, even for free apps with no data collection</li><li><strong>Age rating</strong> — Calculated from a questionnaire in each store’s console</li><li><strong>Data collection disclosures</strong> — Apple’s Privacy Nutrition Labels and Google’s Data Safety section both require you to declare every type of data your app collects, including data from third-party SDKs</li></ul><p>The full checklist with every requirement, device size, and tool recommendation:</p><p><a href="https://capawesome.io/blog/how-to-prepare-your-app-store-listing/">How to Prepare Your App Store Listing</a></p><h3>Step 8 — Complete Google Play’s Closed Testing Period</h3><p><strong>This is the most common surprise for first-time publishers, and it can delay your Android launch by weeks.</strong></p><p>For <strong>personal developer accounts created after November 13, 2023</strong>, Google Play requires new apps to complete a <strong>closed testing period</strong> before they can publish to the public ( <a href="https://support.google.com/googleplay/android-developer/answer/14151465">source</a>):</p><ul><li>You need <strong>at least 12 testers</strong> who actively opt in via a special link</li><li>The testing period must run for <strong>at least 14 consecutive days</strong></li><li>After 14 days with 12+ active testers, you can apply for production access</li></ul><p>Organization accounts are not subject to this requirement.</p><p>This means your Google Play launch is a minimum of two weeks from when you have 12 testers opted in. <strong>Start recruiting testers the moment your first Android build is ready</strong> — don’t wait until you’re “ready to launch.”</p><p>Good places to find testers: your existing user base (if any), the <a href="https://discord.gg/VCXxSVjefW">Capawesome Discord community</a>, your company’s Slack, friends, family.</p><p>The App Store does not have this requirement — iOS apps go live immediately after Apple’s review.</p><h3>Step 9 — Submit for Review</h3><p>With your store listing complete and testing done, you’re ready to submit.</p><h3>App Store (iOS)</h3><p>In App Store Connect, set your app’s release strategy (manual or automatic after approval), assign the build you want to submit, and click Submit for Review. Apple’s review typically takes 3–5 days for new apps.</p><p>Common reasons for rejection: — Missing privacy policy — App crashes on launch (test on a real device, not just a simulator) — Metadata mismatch (screenshots don’t match the app’s actual UI) — Missing required functionality explanations — Login credentials not provided. You must provide the review team with an active and functional test account. Because App Review is an automated and manual process, the reviewers cannot access account-restricted features without valid login information.</p><p>Be careful with all these requirements, because even though you can resubmit your app after a rejection, each resubmission takes longer to be reviewed.</p><h3>Google Play</h3><p>After your closed testing period, apply for production access in the Google Play Console. Once approved, your initial review typically takes 3–7 days.</p><h3>Automated Submissions with Capawesome Cloud</h3><p>Capawesome Cloud <a href="https://capawesome.io/cloud/app-store-publishing/">App Store Publishing</a> automates the submission step entirely. You connect your App Store Connect API key and Google Play service account once, configure your store destinations, and then publish with a single click — or automatically on every successful native build via <a href="https://capawesome.io/docs/cloud/automations/setup/">Automations</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*8ITNcMWe5UbL3Muj.png" /><figcaption>deploy native apps</figcaption></figure><p>Supported destinations: — Apple App Store (production) — TestFlight (internal and external) — Google Play (Internal, Alpha, Beta, Production) — Firebase App Distribution</p><p>When a submission fails, <a href="https://capawesome.io/docs/cloud/assist/">Ask AI</a> in the Capawesome Console parses Apple’s or Google’s validator output and tells you exactly what went wrong and how to fix it — in plain language.</p><h3>Step 10 — Set Up Live Updates: Your Biggest Advantage</h3><p>Once your app is approved, this is the feature that changes everything about how you iterate.</p><p><strong>The problem with native app updates:</strong> Every change you ship — a bug fix, a copy tweak, a new feature — must go through the App Store review queue. That’s 1–5 days. For critical bugs, that’s an eternity.</p><p><strong>Live Updates bypass the queue entirely.</strong></p><p>Because Capacitor separates your app into a native shell and a web layer (HTML, CSS, JavaScript, and static assets), you can update the web layer over the air — directly to users’ devices, in minutes.</p><p><strong>Can update:</strong> any change to your HTML, CSS, JavaScript, images, fonts, JSON data, and other static assets.</p><p><strong>Cannot update:</strong> changes that require new native code, new Capacitor plugins, new iOS/Android permissions, or changes to Info.plist / AndroidManifest.xml. Those still need a native build and a store review.</p><p>In practice, the vast majority of day-to-day iteration — UI changes, bug fixes, new screens, content updates — falls in the “can update” category.</p><h3>Setup</h3><p>Install the Live Update plugin:</p><pre>npm install @capawesome/capacitor-live-update@latest<br>npx cap sync</pre><p>Configure it in capacitor.config.ts:</p><pre>import { CapacitorConfig } from &#39;@capacitor/cli&#39;;<br><br>const config: CapacitorConfig = {<br>  plugins: {<br>    LiveUpdate: {<br>      appId: &#39;your-app-id-from-capawesome-cloud&#39;,<br>      autoUpdateStrategy: &#39;background&#39;,<br>    },<br>  },<br>};<br><br>export default config;</pre><p>autoUpdateStrategy: &#39;background&#39; is the recommended default - the app checks for updates at every launch, downloads them silently in the background, and applies them the next time the user opens the app. No code changes, no user prompts.</p><p>Shipping a fix from that point forward:</p><pre>npm run build<br>npx @capawesome/cli apps:liveupdates:upload</pre><p>Done. Every user gets the fix on their next app launch.</p><p>Capawesome Cloud Live Updates includes features that enterprise teams depend on:</p><p><a href="https://capawesome.io/docs/cloud/live-updates/channels/"><strong>Channels</strong></a> — ship different bundles to different user segments. Useful for A/B testing, staged rollouts, or keeping your beta users on a separate track.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*9ojxTO4_uasEupxj.png" /></figure><p><a href="https://capawesome.io/docs/cloud/live-updates/advanced/rollouts/"><strong>Rollouts</strong></a> — gradually roll out a new bundle to 10%, 25%, 50%, then 100% of users. Watch your error rates before committing to a full release.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*nWnMquMacHgfiwDN.png" /></figure><p><a href="https://capawesome.io/docs/cloud/live-updates/advanced/rollbacks/"><strong>Rollbacks</strong></a> — if something goes wrong, roll back to the previous bundle instantly from the console.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*AC4T4Kld2SbselFF.png" /></figure><p><a href="https://capawesome.io/docs/cloud/live-updates/advanced/code-signing/"><strong>Code Signing</strong></a> — RSA-sign your bundles so the Live Update SDK verifies authenticity on every device before applying an update.</p><p><a href="https://capawesome.io/docs/cloud/live-updates/advanced/delta-updates/"><strong>Delta Updates</strong></a> — only ship the files that changed, not the entire bundle. Dramatically reduces update size and delivery time for returning users.</p><p><a href="https://capawesome.io/docs/cloud/live-updates/devices/"><strong>Device Management</strong></a> — force specific devices to a specific channel. Great for QA devices, internal testing, or enterprise deployments.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*DcaWRQRM7YSTmAGu.png" /></figure><p>Include the Live Update plugin in your first release — even before you have updates to ship. Adding a new plugin requires a new Native Build and another store review, and that’s exactly the situation you don’t want to be in when you’re trying to push a critical fix.</p><p><strong>Full documentation:</strong></p><ul><li><a href="https://capawesome.io/docs/cloud/live-updates/setup/">Getting Started with Live Updates</a></li><li><a href="https://capawesome.io/blog/capacitor-live-updates-guide/">Capacitor Live Updates: A Complete Guide to OTA Updates</a></li><li><a href="https://capawesome.io/docs/cloud/live-updates/guides/update-strategies/">Update Strategies</a></li><li><a href="https://capawesome.io/docs/cloud/live-updates/guides/best-practices/">Live Updates Best Practices</a></li></ul><h3>Step 11 — Automate Everything</h3><p>Once you’re comfortable with the flow, the final step is connecting the pieces so that a git push triggers the entire pipeline without you touching a dashboard.</p><p><a href="https://capawesome.io/docs/cloud/automations/setup/">Capawesome Cloud Automations</a> lets you define end-to-end pipelines:</p><pre>git push to main<br>  → Trigger Native Build (iOS + Android)<br>  → On success: publish to TestFlight + Google Play Internal<br>  → On build approval: deploy Live Update to production channel</pre><p>Automations can be triggered on a <strong>Git push</strong> to a specific branch or tag. When a build or deployment completes, Capawesome Cloud can send a <a href="https://capawesome.io/docs/cloud/automations/webhooks/">webhook</a> with the result — making it easy to post notifications to Slack, Microsoft Teams, Discord, or any other tool, so your team knows when a build succeeds or fails without watching the console.</p><p>For CI/CD pipelines you already have, the <a href="https://capawesome.io/docs/cloud/cli/">Capawesome CLI</a> and <a href="https://capawesome.io/docs/cloud/api/">REST API</a> let you trigger any action from GitHub Actions, GitLab CI, Bitbucket Pipelines, Azure DevOps, or Jenkins.</p><p><strong>Guides:</strong></p><ul><li><a href="https://capawesome.io/blog/ci-cd-for-capacitor-apps/">Capacitor CI/CD in 2026: Why Specialization Wins</a></li><li><a href="https://capawesome.io/blog/ci-cd-for-capacitor-common-pitfalls/">CI/CD for Capacitor: Common Pitfalls and How to Avoid Them</a></li><li><a href="https://capawesome.io/docs/cloud/live-updates/integrations/github-actions/">GitHub Actions integration</a></li><li><a href="https://capawesome.io/docs/cloud/live-updates/integrations/gitlab-ci/">GitLab CI/CD integration</a></li></ul><h3>Everything Inside Capawesome Cloud</h3><p>Here’s the full picture of what Capawesome Cloud gives you — all under one roof, one subscription, one dashboard. All plans include a <strong>14-day free trial</strong>.</p><h3>Native Builds</h3><p>Cloud-based iOS and Android builds on Apple Silicon M4 Pro. No Mac, no build servers to manage. Average build time: 2–5 minutes. Includes managed code signing, build history, downloadable artifacts, environment variables, and full build logs.</p><p><strong>Thousands of native builds</strong> are completed on Capawesome Cloud every month.</p><p>OTA updates delivered over a global CDN. Includes channels, rollouts, rollbacks, RSA code signing, delta updates, device management, and analytics.</p><h3>App Store Publishing</h3><p>One-click submissions to TestFlight, the App Store, Google Play (all tracks), and Firebase App Distribution. Supports multiple destinations per app — ideal for <a href="https://capawesome.io/solutions/white-label/">white-label</a> products or regional variants. Encrypted credentials, protected destinations with role-based access control, and full audit logs.</p><p><strong>Thousands of App Store updates</strong> deployed every month.</p><h3>Automations</h3><p>Automatically trigger native builds from Git events — on every push to a branch or on tag creation. Chain builds with store publishing and live update deployments in a single pipeline. When a build completes, Capawesome Cloud sends a <a href="https://capawesome.io/docs/cloud/automations/webhooks/">webhook</a> with the result so you can connect it to any notification tool.</p><h3>Assist — AI Diagnostics</h3><p>When a build or deployment fails, Ask AI turns the raw validator output from Apple, Google, or your build logs into a plain-language cause → explanation → suggested fix. Opt-in per click, zero data retention.</p><h3>Integrations</h3><p>GitHub, GitLab, Bitbucket, Azure DevOps, GitHub Enterprise, GitLab Self-Managed, Slack, Microsoft Teams, Discord.</p><h3>Security &amp; Compliance</h3><ul><li>GDPR compliant, data hosted in Germany</li><li>ISO 27001 certified (our data center partners)</li><li>SOC 2 Type II (report available on request)</li><li>All credentials encrypted at rest</li><li>RSA code signing for live update bundles</li></ul><h3>Need Expert Help? We Do That Too</h3><p>Building a Capacitor app is learnable, but sometimes you need someone who’s already made all the mistakes.</p><p>The Capawesome team offers <a href="https://capawesome.io/consulting/">consulting services</a> for teams that need hands-on help:</p><ul><li><strong>Capacitor app development</strong> — architecture, development, deployment, and maintenance</li><li><strong>Custom Capacitor plugins</strong> — if no existing plugin does what you need, we build it. We’ve delivered custom plugins for dozens of companies, often within a few days</li><li><strong>Collaborative support</strong> — work alongside your team for architecture reviews, code reviews, debugging, and pairing sessions</li><li><strong>CI/CD setup</strong> — get your build and deployment pipeline configured correctly from the startThe Complete Checklist to Deploy a Mobile app</li></ul><p>Check: <a href="https://capawesome.io/blog/11-steps-to-get-your-web-app-on-the-app-store/">The Complete Checklist to Deploy a Mobile app</a></p><h3>Final Thoughts</h3><p>The mobile app store process has a reputation for being painful — and for good reason. The certificate maze, the review queue, the toolchain requirements, the surprise gotchas like Google’s closed testing period — none of it is developer-friendly by default.</p><p>But the actual hard parts are a small fraction of what people worry about. With Capacitor handling the native layer, Capawesome Cloud handling the build and deployment infrastructure, and a handful of free browser tools handling the certificate setup, the genuinely difficult stuff is gone. What’s left is building your product.</p><p>If you get stuck at any step, the <a href="https://discord.gg/VCXxSVjefW">Capawesome Discord</a> is active and the team is there. And if you want someone in the trenches with you, <a href="https://capawesome.io/consulting/">consulting is available</a>.</p><p>Subscribe to the <a href="https://capawesome.io/newsletter/">Capawesome newsletter</a> for updates on new plugins, Cloud features, and guides like this one.</p><p><a href="https://console.cloud.capawesome.io">Start your 14-day free trial</a></p><p><em>Originally published at </em><a href="https://capawesome.io/blog/11-steps-to-get-your-web-app-on-the-app-store/"><em>https://capawesome.io</em></a><em> on June 4, 2026.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5299d80a67d0" width="1" height="1" alt=""><hr><p><a href="https://medium.com/learn-ionic-framework/11-steps-to-get-your-web-app-on-the-app-store-5299d80a67d0">11 Steps to Get Your Web App on the App Store</a> was originally published in <a href="https://medium.com/learn-ionic-framework">Learn Ionic Framework</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Day Your Mobile Release Process Breaks — And How CI/CD Fixes It]]></title>
            <link>https://medium.com/learn-ionic-framework/the-day-your-mobile-release-process-breaks-and-how-ci-cd-fixes-it-892162f0caab?source=rss----daeb57a79fec---4</link>
            <guid isPermaLink="false">https://medium.com/p/892162f0caab</guid>
            <category><![CDATA[ci-cd-pipeline]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[ionic]]></category>
            <category><![CDATA[capacitor]]></category>
            <dc:creator><![CDATA[Dayana Jabif]]></dc:creator>
            <pubDate>Mon, 23 Mar 2026 12:14:22 GMT</pubDate>
            <atom:updated>2026-03-23T12:14:23.749Z</atom:updated>
            <content:encoded><![CDATA[<h3>The Day Your Mobile Release Process Breaks (And Why CI/CD Fixes It)</h3><p>At some point, every mobile team hits the same realization 🤯.</p><p><strong>CI/CD is the moment your app stops depending on one person’s laptop.</strong></p><p>It’s the moment when builds become reproducible, releases become predictable, and shipping stops feeling stressful.</p><p><strong>Suddenly you have:</strong></p><ul><li>reproducible builds</li><li>fewer app store rejections</li><li>no certificate headaches</li><li>faster hotfixes</li><li>and a team that can ship without fear</li></ul><p>But many mobile apps still ship the old way.</p><p>Manually.</p><p>And that’s where the problems start.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pcEScMp07oyK0H-5k20IFQ.jpeg" /></figure><h3>The Hidden Cost of Manual Mobile Releases</h3><p>Every team eventually runs into the pain of manual releases.</p><p>If your team hasn’t yet, don’t worry.<br>It will happen 😬.</p><p>Manual release processes usually look something like this:</p><ul><li>someone has “the machine that does the builds”</li><li>the keystore is somewhere… hopefully backed up</li><li>certificates expire at the worst possible moment</li><li>the release checklist lives in a Notion doc nobody reads</li><li>and everyone holds their breath during release day</li></ul><p>And then one day it happens…</p><p>You need to ship an urgent fix.</p><p>But the person who usually makes the build is…</p><p>on vacation.</p><p>Somewhere.</p><p>Possibly hiking.</p><p>Maybe halfway up a mountain.</p><p>With no signal.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gh4VHogn71rSgqLLFv8BwQ.png" /></figure><p>Now the team has two options:</p><ol><li>Wait until they come back.</li><li>Try to reproduce the build on another machine and pray it works.</li></ol><p>Neither option is great.</p><p><strong>A proper CI/CD pipeline solves exactly this problem.</strong></p><p>No panic.<br>No mystery steps.<br>No “special laptop required”.</p><p>Anyone on the team can trigger a reproducible build at any time.</p><p>And that’s a huge difference.</p><p>Studies on software delivery show that teams with mature CI/CD practices deploy <strong>up to 46× more frequently</strong> and experience <strong>significantly fewer failures</strong> than teams without automation.</p><p>That’s not just a DevOps improvement.</p><p><a href="https://capawesome.io/blog/why-every-capacitor-team-needs-ci-cd/">That’s a business advantage</a>.</p><h3>CI/CD for Web Apps Is Easy</h3><p>If you’ve set up CI/CD for a web application before, you might wonder what the big deal is.</p><p>For web apps, the process is usually simple:</p><ol><li>Install dependencies</li><li>Run tests</li><li>Build static files</li><li>Deploy to a server or CDN</li></ol><p>Done.</p><p>But mobile apps are a completely different story 😵‍💫.</p><h3>Why Mobile CI/CD Is Harder</h3><p>Mobile apps introduce complexity that simply doesn’t exist in web deployments.</p><p>Let’s break down the main four reasons.</p><h4>1. Native compilation</h4><p>Mobile apps include native Android and iOS projects.</p><p>That means your pipeline must build:</p><ul><li>Android with <strong>Gradle</strong></li><li>iOS with <strong>Xcode</strong></li></ul><p>And here’s the catch:</p><p><strong>Xcode only runs on macOS.</strong></p><p>So your CI/CD environment needs macOS build machines in order to compile iOS apps.</p><p>This alone already makes mobile CI/CD more complex than most web pipelines.</p><h4>2. Code signing</h4><p>Mobile apps must be cryptographically signed before distribution.</p><p><strong>For Android, you need:</strong></p><ul><li>a keystore</li><li>signing configuration</li><li>secure key storage</li></ul><p><strong>For iOS, things get even more complicated:</strong></p><ul><li>distribution certificates</li><li>provisioning profiles</li><li>Apple Developer account integration</li></ul><p>Managing these assets securely inside CI/CD pipelines is one of the most common causes of mobile build failures.</p><h4>3. Two platforms, double the complexity</h4><p>Most teams ship to both platforms: Android and iOS.</p><p>Every release potentially produces two different artifacts: APK or AAB, and IPA.</p><p>Each platform has its own:</p><ul><li>toolchain</li><li>signing process</li><li>configuration</li><li>store submission flow</li></ul><p>So your pipeline has to orchestrate <strong>two completely different ecosystems</strong>.</p><h4>4. App store review cycles</h4><p>Unlike web apps, mobile apps cannot deploy instantly (*).</p><p>Every update must go through store review:</p><ul><li>Apple App Store</li><li>Google Play Store</li></ul><p>This introduces delays that can make rapid iteration harder.</p><p>(*) But here’s where things get interesting. Many teams combine CI/CD with <a href="https://cloud.capawesome.io/live-updates/"><strong>Live Updates</strong></a> to bypass this bottleneck for web-layer changes.</p><p><strong>If you’re building your mobile app with Capacitor, you already have a bit of a superpower: your app’s UI, logic, and assets live in the web layer. Which means that many changes don’t actually require a full app store submission.</strong></p><p>Instead of: wait → review → wait → approval → release</p><p>You can simply push updated web assets directly to your users.</p><p>No review queue.<br>No waiting days for approval.<br>No staring nervously at Native Stores.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*t8mr7QKLzvRekYCL2eU4dw.jpeg" /></figure><p>Think of it like deploying a web app… except it’s already installed on thousands of devices. Suddenly hotfixes, small UI tweaks, copy changes, and minor improvements can ship in minutes instead of days 🚀.</p><p>And your users get the update the next time they open the app — like magic.</p><p>Not bad for what is essentially a <strong>web deployment disguised as a mobile update</strong>.</p><h3>The Real Goal of CI/CD</h3><p><strong>CI/CD is not just about automation. It’s about making releases boring.</strong></p><p>When CI/CD is done right:</p><ul><li>builds are reproducible</li><li>releases are predictable</li><li>failures are easier to diagnose</li><li>hotfixes ship quickly</li></ul><p>High-performing DevOps teams are able to deploy multiple times per day, while low-performing teams may deploy only once every several months.</p><p>Automation is what closes that gap.</p><h3>CI/CD for Capacitor Apps</h3><p>Capacitor apps add another dimension to the pipeline.</p><p>Your CI/CD system needs to handle:</p><ul><li>web builds</li><li>native sync</li><li>Android builds</li><li>iOS builds</li><li>code signing</li><li>artifact storage</li><li>distribution to testers or stores</li></ul><p>Setting all this up manually with generic CI tools like GitHub Actions is possible.</p><p>But it often requires a lot of configuration and ongoing maintenance.</p><p>That’s where <a href="https://capawesome.io/blog/choosing-the-right-ci-cd-approach-for-capacitor-apps/">specialized mobile CI/CD platforms</a> can help 🥁.</p><h3>Automating Mobile Builds with Capawesome Cloud</h3><p>One solution designed specifically for Capacitor apps is <strong>Capawesome Cloud</strong>.</p><p>👉 <a href="https://cloud.capawesome.io/">https://cloud.capawesome.io/</a></p><p><strong>Capawesome Cloud provides CI/CD infrastructure tailored for mobile development.</strong></p><p>Instead of maintaining complex pipelines, you can trigger mobile builds directly from your Git repository.</p><p><strong>Typical workflow:</strong></p><ol><li>Connect your Git repository</li><li>Trigger builds from a branch, tag, or commit</li><li>Build Android and iOS apps in the cloud</li><li>Download artifacts (APK, AAB, IPA)</li><li>Distribute builds to testers or stores</li></ol><p>The platform takes care of many of the painful parts of mobile CI/CD:</p><ul><li>manage Android and iOS build environments</li><li>secure certificate and keystore management</li><li>reproducible builds from Git references</li><li>artifact storage and distribution</li></ul><p><strong>I know it sounds like magic… but sometimes the best engineering tricks feel that way 🪄.</strong></p><h3>Migrating from Appflow (or Any Other CI/CD Tool)</h3><p>Many teams in the Ionic ecosystem are currently reevaluating their CI/CD setup.</p><p>Especially with the <strong>sunsetting of Appflow</strong>.</p><p>The good news is that <a href="https://capawesome.io/blog/migrating-from-ionic-appflow-to-capawesome-cloud/">migrating to Capawesome Cloud </a>is often easier than expected.</p><p>Because the APIs and update strategies are so similar, most teams can migrate without major architectural changes to their apps.</p><p>Beyond the migration itself, many teams choose Capawesome Cloud because it provides:</p><ul><li><strong>Native builds, Live Updates, and store publishing in one platform</strong></li><li><strong>3–5× faster builds with modern infrastructure</strong></li><li><strong>significantly lower costs compared to Appflow</strong></li><li><strong>active development and new features</strong> instead of a platform approaching end-of-life</li></ul><blockquote>In other words, migrating isn’t just about replacing Appflow — it’s an opportunity to modernize your mobile CI/CD pipeline and simplify your release workflow.</blockquote><h3>Final Thoughts</h3><p>CI/CD is one of the highest-leverage improvements a mobile team can make.</p><p>It reduces risk.<br>It speeds up releases.<br>And it removes a surprising amount of stress from release days.</p><p>If you’re still doing mobile releases manually, the cost is probably higher than it seems — in time, in risk, and in the releases that never happen because shipping is too painful.</p><p>Automation changes that.</p><p><strong>If you’re building Capacitor apps and want help: setting up CI/CD from scratch, improving your current pipeline, or migrating from Appflow or another platform, feel free to reach out.</strong></p><p>I’m always happy to help teams design a reliable mobile build and release workflow.</p><p>You can explore <a href="https://cloud.capawesome.io/"><strong>Capawesome Cloud</strong></a> and if you have any questions or run into issues with mobile CI/CD, feel free to message me.</p><p><a href="https://x.com/dayujabif">Follow me on X </a>for more content like this.</p><p>Happy shipping 🚀</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=892162f0caab" width="1" height="1" alt=""><hr><p><a href="https://medium.com/learn-ionic-framework/the-day-your-mobile-release-process-breaks-and-how-ci-cd-fixes-it-892162f0caab">The Day Your Mobile Release Process Breaks — And How CI/CD Fixes It</a> was originally published in <a href="https://medium.com/learn-ionic-framework">Learn Ionic Framework</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Upgrade your project to Firebase 9: Get the most out of the new features and API changes]]></title>
            <link>https://medium.com/learn-ionic-framework/upgrade-your-project-to-firebase-9-get-the-most-out-of-the-new-features-and-api-changes-6b13092a0580?source=rss----daeb57a79fec---4</link>
            <guid isPermaLink="false">https://medium.com/p/6b13092a0580</guid>
            <category><![CDATA[firebase]]></category>
            <category><![CDATA[capacitor]]></category>
            <category><![CDATA[angular]]></category>
            <category><![CDATA[ionic]]></category>
            <dc:creator><![CDATA[Agustin Haller]]></dc:creator>
            <pubDate>Mon, 10 Apr 2023 16:22:36 GMT</pubDate>
            <atom:updated>2023-04-10T16:22:36.286Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*ViwBrrgZ5inWNDTp.png" /></figure><p>When I decided to migrate from Firebase 8 to version 9, I couldn’t find all the resources in one place. That’s why I decided to write about these changes, so you can easily follow them and keep your code up to date.</p><p>The latest version of Firebase 9 is a significant update that brings new features and benefits that make it easier for developers to build high-quality apps.</p><p>This release introduces a new modular API that enables tree-shaking, bundle size reduction, and other benefits that are optimized for the elimination of unused code.</p><p>Firebase 9 uses the modern JavaScript module format, which allows developers to selectively import only the features they need in their app rather than the entire library. Tree-shaking with Firebase version 9 can result in up to 80% less kilobytes than a comparable app built with version 8.</p><p>Upgrading to Firebase 9 may involve some effort to adjust the implementation of companion libraries like @angular/fire, RxFire, and the Firebase Capacitor plugin. However, the effort is worth it for the benefits of modularization and reduced app size.</p><p>It’s worth mentioning that Firebase version 8 will be frozen at some point in the future, meaning you will not receive any more updates or bug fixes.</p><p>While there is a Firebase compat package available to make the migration easier, it is only a temporary fix. I highly recommend upgrading to Firebase 9 to take full advantage of its benefits and keep your app up-to-date.</p><p>The effort required to upgrade to Firebase 9 may seem daunting, but it is a necessary step to ensure that your app is optimized for the best performance and user experience.</p><p>In conclusion, upgrading to Firebase 9 is essential for app developers who want to take full advantage of the latest features and benefits. With its modularized approach, reduced app size, and ongoing feature development, Firebase 9 is a must-have for any developer who wants to build high-quality apps that perform well and offer the best user experience.</p><p>So, what are you waiting for?</p><p>Upgrade to Firebase 9 today!</p><p>You can follow the migration guide here: <a href="https://ionicthemes.com/tutorials/getting-to-know-the-latest-firebase-9-update-and-features">https://ionicthemes.com/tutorials/getting-to-know-the-latest-firebase-9-update-and-features</a></p><p><em>Originally published at </em><a href="https://ionicthemes.com/tutorials/getting-to-know-the-latest-firebase-9-update-and-features"><em>https://ionicthemes.com</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6b13092a0580" width="1" height="1" alt=""><hr><p><a href="https://medium.com/learn-ionic-framework/upgrade-your-project-to-firebase-9-get-the-most-out-of-the-new-features-and-api-changes-6b13092a0580">Upgrade your project to Firebase 9: Get the most out of the new features and API changes</a> was originally published in <a href="https://medium.com/learn-ionic-framework">Learn Ionic Framework</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Customizing Ionic Components — How to build any UI with Ionic]]></title>
            <link>https://medium.com/learn-ionic-framework/customizing-ionic-components-how-to-build-any-ui-with-ionic-d932a19b9ca9?source=rss----daeb57a79fec---4</link>
            <guid isPermaLink="false">https://medium.com/p/d932a19b9ca9</guid>
            <category><![CDATA[ionic]]></category>
            <category><![CDATA[mobile]]></category>
            <category><![CDATA[ui]]></category>
            <category><![CDATA[web-components]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Dayana Jabif]]></dc:creator>
            <pubDate>Thu, 21 Oct 2021 11:06:50 GMT</pubDate>
            <atom:updated>2021-10-21T11:06:50.084Z</atom:updated>
            <content:encoded><![CDATA[<h3>Customizing Ionic Components — How to build any UI with Ionic</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*to8_Kt7j32PvTAa6.png" /></figure><p>In this post we want to share with you the recipe we use at <a href="https://ionicthemes.com">IonicThemes</a> to build our starter templates. Hopefully you would learn how to approach the task of building <strong>reusable UI kits</strong> or design systems and create your own components to <strong>improve the efficiency</strong> in future projects.</p><p>I would like to start this post by talking about the term “<strong>Composition</strong>”. I believe the essence of software development is composition. And by composition I mean: <strong>The act of combining parts or elements to form a bigger element.</strong></p><p>Compositions are formed by adding new objects to the previous ones, so that each of the latter is part of the former.</p><p>The process of software development is breaking down large problems into smaller ones.</p><p>Then, we can build components to solve those smaller problems, and compose them together to form a complete application.</p><h4>Look around: composition is everywhere!</h4><p>Components can be very diverse. We could define a component as something that can be useful on its own or that can also be combined with another element to form a bigger one.</p><p>Now think about this idea recursively. Because composition has no limits. You can compose objects as many times as you want.</p><p>But, composition is not only about software, it’s around us everywhere.</p><p>Almost everything in this world is made up of different elements or components and can be broken down into smaller pieces.</p><p>Getting back to building Ionic applications, we can divide elements in two categories: <strong>UI Components and Functionalities</strong>.</p><p>Let me show you a clear example of how we can apply composition when creating a classic Sign Up form.</p><h3>Creating a Sign-up Form with Ionic components</h3><p>For instance, let’s start by combining a few inputs, labels, and a button. We can agree that this is a decent sign-up form, right?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/300/0*IV0VzryxJPvlDQyW.png" /></figure><p>But, let’s go a step further and think about what will happen when the user submits the form with an invalid value. The app should suggest that there are existing errors which must be corrected. As a result, the user experience will be improved.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/300/0*7UuE-3DI1cWC3vj-.png" /></figure><p>Also, adding a <a href="https://ionicthemes.com/templates/features/show-hide-password">show/hide password component</a> is really helpful to improve the UX for users on mobile devices or small screens.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/300/0*ZvDx5D9bzmC08nc-.png" /></figure><p>Nowadays, we also need to add social sign in to the sign-up form, because nobody wants to remember another password. Also, <a href="https://ionicthemes.com/tutorials/firebase-authentication-in-ionic-framework-apps#ionic-authenication-options">adding social sign in to our mobile apps</a> has a lot of benefits.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/300/0*nXnI8q1OLGrwL6xc.png" /></figure><p>Do you see the difference between the first and the last form example? Picture this process as a composition of different elements, we combined different elements (labels, inputs, buttons, copy) and interactions (validations, hints, OAuth integrations) to drastically improve the usability and user experience for the sign-up form.</p><blockquote>By having a bunch of individual pieces already built, you can combine them to create better experiences.</blockquote><p>Well, that was just for the UI of a classic sign up page, but take a second to think of all the pieces and elements that any given app includes such as <a href="https://ionicthemes.com/templates/features/authentication">authentication flows</a>, user management, all the <strong>UI components</strong> such as:</p><ul><li><a href="https://ionicthemes.com/templates/components/lists">Ionic lists</a></li><li><a href="https://ionicthemes.com/templates/components/modals">Ionic modals</a></li><li><a href="https://ionicthemes.com/templates/components/cards">Ionic cards</a></li><li><a href="https://ionicthemes.com/templates/components/side-menu">Ionic menus</a></li><li><a href="https://ionicthemes.com/templates/components/tabs">Ionic tabs</a></li><li><a href="https://ionicthemes.com/templates/components/slider">Ionic slides</a></li><li><a href="https://ionicthemes.com/templates/components/image-gallery">Image gallery in Ionic</a></li><li>and this is just to mention a few.</li></ul><p><strong>As for functionalities:</strong></p><ul><li><a href="https://ionicthemes.com/templates/features/google-maps">Maps in Ionic</a></li><li><a href="https://ionicthemes.com/templates/features/forms">Ionic forms</a></li><li><a href="https://ionicthemes.com/templates/features/navigation">Navigation in Ionic</a></li><li>notifications</li><li>payments</li><li><a href="https://ionicthemes.com/tutorials/ionic-2-image-handling">Ionic image handling</a></li><li>and trust me, the list goes on and on.</li></ul><p><strong>In case you don’t get my point, what I want to show you is how an app is built by composing hundreds of building blocks and functionalities.</strong></p><blockquote>So if you, as a developer, pretend to build every piece of your application…, you are absolutely out of your mind!</blockquote><h3>Using and reusing Ionic components</h3><p>Composition enables us to use and reuse components. And these components can either be created by you or by others.</p><p>I mean, if you are like us that <a href="https://ionicthemes.com/templates">builds multiple Ionic apps,</a> you’ve probably gone through the sign-up page a couple of times, so, there’s no point in coding it each time.</p><p>You can focus on building it once and then reuse it as often as necessary and just customize the styles for each application.</p><p>I loved this quote from Eric Elliot, <strong>“A software developer who doesn’t understand composition is like a home builder who doesn’t know about bolts or nails.”</strong></p><h3>Save time, don’t repeat yourself</h3><p>When building an app there are many repetitive tasks that you can avoid. Like the example from the sign-up page we saw before.</p><p>Thanks to the composition of multiple elements, we can save a lot of time. This frees us from having to be experts regarding all the aspects of developing an app.</p><blockquote><em>You don’t have to be an expert in every aspect of creating an app. We just need to be good assemblers to combine all the building blocks that will result in our unique application.</em></blockquote><p>What is more, the beauty of open source is collaboration. Being able to share your knowledge and extend the creation of other developers is something we have to be very grateful for. Personally, I learn a lot from seeing other people’s code.</p><p>From my point of view, collaboration and community are also a big part of composition, because you can use an element built by someone else and use it as it is, or you can use it as a suitable starter to build something else.</p><p>Okay, enough talking about all this theory, let’s see how to build any UI with Ionic.</p><h3>Customizing and composing Ionic Elements</h3><p>One of the features I love the most about Ionic Framework is the immense amount of <a href="https://ionicframework.com/docs/components">components</a> that are ready to use, customize and extend.</p><p>These elements are also beautifully crafted as <a href="https://ionicthemes.com/tutorials/tag/web-components">Web Components</a> enabling encapsulation and allowing them to be portable and easily reused.</p><p>In addition to this, each of these Ionic components consists of one or more custom elements.</p><p>For example, a card can be composed of images, labels and buttons. And this happens with many other Ionic UI components.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/333/0*jaD1EKkKkMndUsLR.png" /></figure><p>Regarding web components, I won’t go into details here but, if you aren’t familiar with them or if you are interested in learning more, we have an extensive article about <a href="https://ionicthemes.com/tutorials/ionic-4-tutorial-mastering-web-components-in-ionic-4">Web Components in Ionic Apps</a>.</p><p>For the purpose of this post, let’s divide elements in two categories:</p><ul><li>UI Elements</li><li>Functionalities</li></ul><h3>Ionic Components customization strategies</h3><p>There are different strategies we can use to customize and enhance Ionic components. Some of them are pretty straight forward, others require adding more code (HTML and CSS).</p><p>In the following sections I will explain how to progressively customize an <a href="https://ionicframework.com/docs/api/checkbox">Ion Checkbox</a> using four different strategies.</p><p>Why a checkbox? Because I want to show you how we can achieve beautiful UIs through composition even with a dull and plain checkbox.</p><p>In the following image you can see a basic and raw Ion-Checkbox component.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/350/0*jW5v3a9eRktdGNzH.png" /></figure><p>I broke the customization down into four levels of effort and complexity and I built some <a href="https://ioniconf-2021.web.app/tabs/tab1">code examples</a> for each of these scenarios, so you can better understand what I’m trying to explain here. <a href="https://ionicthemes.com/tutorials/how-to-build-any-ui-with-ionic">You can download all the source code of this example app.</a></p><ol><li><a href="https://ionicthemes.com/tutorials/how-to-build-any-ui-with-ionic#css-variables-and-shadow-parts">Ionic CSS variables and Shadow Parts</a></li><li><a href="https://ionicthemes.com/tutorials/how-to-build-any-ui-with-ionic#html-and-css">Adding HTML and CSS</a></li><li><a href="https://ionicthemes.com/tutorials/how-to-build-any-ui-with-ionic#customization-based-on-the-component-api">Customization based on component events</a></li><li><a href="https://ionicthemes.com/tutorials/how-to-build-any-ui-with-ionic#adding-functionalities">Customization based on functionalities</a></li></ol><blockquote><strong>If you want to go over each of these customization strategies please refer to the </strong><a href="https://ionicthemes.com/tutorials/how-to-build-any-ui-with-ionic"><strong>original post</strong></a><strong>.</strong></blockquote><p>Hope you enjoyed this Ionic Customization post. Thank you very much for reading and if you have any questions or feedback please leave a comment below.</p><p><em>Originally published at </em><a href="https://ionicthemes.com/tutorials/how-to-build-any-ui-with-ionic"><em>https://ionicthemes.com</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d932a19b9ca9" width="1" height="1" alt=""><hr><p><a href="https://medium.com/learn-ionic-framework/customizing-ionic-components-how-to-build-any-ui-with-ionic-d932a19b9ca9">Customizing Ionic Components — How to build any UI with Ionic</a> was originally published in <a href="https://medium.com/learn-ionic-framework">Learn Ionic Framework</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Create a Show / Hide Password Component in Ionic & Angular]]></title>
            <link>https://medium.com/learn-ionic-framework/create-a-show-hide-password-component-in-ionic-angular-a3960094726a?source=rss----daeb57a79fec---4</link>
            <guid isPermaLink="false">https://medium.com/p/a3960094726a</guid>
            <category><![CDATA[ionic]]></category>
            <category><![CDATA[angular]]></category>
            <category><![CDATA[angularjs]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[ionic-framework]]></category>
            <dc:creator><![CDATA[Dayana Jabif]]></dc:creator>
            <pubDate>Mon, 19 Oct 2020 23:33:58 GMT</pubDate>
            <atom:updated>2021-02-21T18:09:33.023Z</atom:updated>
            <content:encoded><![CDATA[<p><strong>Add this show/hide password component to your Ionic Angular App in 3 simple steps.</strong></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttps%2Fwww.youtube.com%2Fembed%2FQjJ5E4nP2-s%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttps%2Fwww.youtube.com%2Fwatch%3Fv%3DQjJ5E4nP2-s&amp;image=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttps%2Fi.ytimg.com%2Fvi%2FQjJ5E4nP2-s%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/4b418b77f3b02a2237bbb4fb5bfeeb06/href">https://medium.com/media/4b418b77f3b02a2237bbb4fb5bfeeb06/href</a></iframe><h3>Step 1 — Create the Angular component</h3><ul><li>Create an Angular Component with a ContentChild IonInput.</li><li>Add a toggle method that will be triggered when clicking the eye icon.</li><li>This method will switch between showing the password text and the dots.</li><li>Define a showPassword boolean var.</li></ul><pre>import { Component, ContentChild } from &#39;@angular/core&#39;;<br>import { IonInput } from &#39;@ionic/angular&#39;;</pre><pre>@Component({<br>  selector: &#39;app-show-hide-password&#39;,<br>  templateUrl: &#39;./show-hide-password.component.html&#39;,<br>  styleUrls: [&#39;./show-hide-password.component.scss&#39;]<br>})<br>export class ShowHidePasswordComponent {<br>  showPassword = false;</pre><pre>@ContentChild(IonInput) input: IonInput;</pre><pre>constructor() {}</pre><pre>toggleShow() {<br>    this.showPassword = !this.showPassword;<br>    this.input.type = this.showPassword ? &#39;text&#39; : &#39;password&#39;;<br>  }<br>}</pre><h3>Step 2 — Add the html markup for the component</h3><ul><li>Create a simple anchor with our toggle method binded to the click event.</li><li>Change the icon between eye open and eye closed depending on the showPassword var.</li></ul><pre>&lt;ng-content&gt;&lt;/ng-content&gt;<br>&lt;a class=&quot;type-toggle&quot; (click)=&quot;toggleShow()&quot;&gt;<br>   &lt;ion-icon class=&quot;show-option&quot; [hidden]=&quot;showPassword&quot; name=&quot;eye-off-outline&quot;&gt;&lt;/ion-icon&gt;<br>   &lt;ion-icon class=&quot;hide-option&quot; [hidden]=&quot;!showPassword&quot; name=&quot;eye-outline&quot;&gt;&lt;/ion-icon&gt;<br>&lt;/a&gt;</pre><p>This is my <strong>show-hide-password.component.scss, </strong>to add some styles.</p><pre>:host {<br>  display: flex;<br>  width: 100%;<br>  align-items: center;</pre><pre>.type-toggle {<br>    padding-inline-start: 0.5rem;</pre><pre>.show-option,<br>    .hide-option {<br>      font-size: 1.2rem;<br>      display: block;</pre><pre>// In case you want to use text instead of icons<br>      &amp;:not(ion-icon) {<br>        text-transform: uppercase;<br>        font-size: 1rem;<br>      }<br>    }<br>  }<br>}</pre><h3>Step 3 — Use the Show / Hide password component</h3><p>Just use the component with a <em>&lt;ion-input&gt;</em> as a content child.</p><pre>&lt;ion-item&gt;<br>  &lt;app-show-hide-password&gt;<br>      &lt;ion-input type=&quot;password&quot; placeholder=&quot;Password&quot; formControlName=&quot;password&quot;&gt;&lt;/ion-input&gt;<br>  &lt;/app-show-hide-password&gt;<br>&lt;/ion-item&gt;</pre><p>That’s all.</p><p>That was easy right?</p><p>Go ahead and add it to your Ionic Framework App and show me the result.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/756/1*udHYIJSqkc60LHBPcNI00Q.png" /><figcaption>show hide password icon</figcaption></figure><p><a href="https://ionicthemes.com/tutorials">Learn more about Ionic Framework!</a></p><p>Need help with the styling? Let me know in the comments.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a3960094726a" width="1" height="1" alt=""><hr><p><a href="https://medium.com/learn-ionic-framework/create-a-show-hide-password-component-in-ionic-angular-a3960094726a">Create a Show / Hide Password Component in Ionic &amp; Angular</a> was originally published in <a href="https://medium.com/learn-ionic-framework">Learn Ionic Framework</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What’s new in Ionic 5? — Free example starter to jump start your ionic app development!]]></title>
            <link>https://medium.com/learn-ionic-framework/whats-new-in-ionic-5-free-example-starter-to-jump-start-your-ionic-app-development-aeae53fdc28e?source=rss----daeb57a79fec---4</link>
            <guid isPermaLink="false">https://medium.com/p/aeae53fdc28e</guid>
            <category><![CDATA[angular]]></category>
            <category><![CDATA[app-development]]></category>
            <category><![CDATA[ionic-framework]]></category>
            <category><![CDATA[ionic]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <dc:creator><![CDATA[Dayana Jabif]]></dc:creator>
            <pubDate>Fri, 12 Jun 2020 19:30:48 GMT</pubDate>
            <atom:updated>2020-06-12T19:30:48.063Z</atom:updated>
            <content:encoded><![CDATA[<h3>What’s new in Ionic 5 —Free example app</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5TtBnHpopNTkSvLqHZ8s-A.jpeg" /><figcaption>ionic 5 introduction tutorial</figcaption></figure><p>Around this time last year, we were writing about the new <a href="https://ionicthemes.com/tutorials/about/ionic-4-vs-ionic-3">Ionic Framework version 4</a>. It was a great deal compared to its predecessor, Ionic 3.</p><p>Luckily, the team at Ionic is very committed to keep pursuing their goal of <strong>making app development easier</strong> and recently announced the latest and much awaited <strong>Ionic 5 release</strong>.</p><p>It’s clear to me, as an insider, that Ionic is one of the top frameworks regarding the peace of innovation they bring to the game on each iteration (now supporting both Angular, React, and Vue!). They are fearless and confident in the direction they envision for the future of mobile and web development.</p><p>In this post we want to explain how to take advantage of the new benefits from Ionic 5. We will describe the main changes and show you how to migrate your applications from Ionic 4 to Ionic 5.</p><blockquote>For this post we created an Ionic 5 free demo app. It’s a CRUD app with some of the new Ionic 5 features such as swipeable modals, collapsible headers, segments, animations, as well as, lists, reactive forms, and navigation examples. <strong>Download it for free in </strong><a href="https://ionicthemes.com/tutorials/about/ionic5-tutorial-migration-and-starter"><strong>IonicThemes</strong></a><strong>.</strong></blockquote><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttps%2Fwww.youtube.com%2Fembed%2FgENv7OYepHk%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttps%2Fwww.youtube.com%2Fwatch%3Fv%3DgENv7OYepHk&amp;image=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttps%2Fi.ytimg.com%2Fvi%2FgENv7OYepHk%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="640" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/1bcffcb67ad5d956f528d14be613dc34/href">https://medium.com/media/1bcffcb67ad5d956f528d14be613dc34/href</a></iframe><h3>What’s new in Ionic 5?</h3><p>The highlights of this new release are mainly centered around design and UI/UX, featuring a brand new API to create outstanding animations, new and improved Ionicons icon library, components featuring iOS 13 design spec and also some useful customization improvements regarding component styling.</p><h3>Animations API</h3><p>The new <a href="https://ionicframework.com/docs/utilities/animations">Ionic Animations API</a>, presents a shift from Javascript-driven animation libraries. This legacy approach followed by many well known animation libraries is problematic in many ways. Mostly because the browser is responsible for both rendering your animation and executing your animation event loop code at every frame in the same thread as the rest of your app’s code. This traduces on performance loss as the browser is forced to waste CPU time by executing your code on every frame.</p><p>Harnessing the Web Animations API, the new Ionic Animations API can offload to the browser all of the work required to run your animations. This way, the browser will be able to schedule and make optimizations so your animations will run smoothly. This new, open source animation utility is not only framework agnostic (yes, that means you can use it in Angular, React, Vue or just vanilla Javascript), but it also shines in the <a href="https://blog.ionicframework.com/wp-content/uploads/2020/01/animation-benchmark-results.pdf">benchmarks performed by the Ionic team</a>.</p><p>To be honest, this looked so promising that I had to give it a try. I included a custom animation to the Ionic 5 starter included in this post to showcase the new feature. The results are amazing, I would highly recommend giving the Ionic Animation utility a try.</p><p>We created a very simple animation when pressing a heart icon that can be useful when giving a fav or a like to something.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/0*Zi59rQ--NfubP1tp.gif" /></figure><h3>Improved components and UI/UX</h3><p>Besides reworking many of the components ( <a href="https://github.com/ionic-team/ionic/blob/master/BREAKING.md#segment">Segment</a>, <a href="https://github.com/ionic-team/ionic/blob/master/BREAKING.md#list-header">List Header</a>, among many more) to match the latest iOS 13 design spec, the new release includes changes that make customizing components easier.</p><p><a href="https://ionicthemes.com/tutorials/about/ionic-4-tutorial-mastering-web-components-in-ionic-4">Since Web Components and Shadow DOM were introduced in Ionic 4</a>, customizing components has been one of the most arduous things to achieve. In part because of the encapsulation provided by Shadow DOM and part because of the lack of CSS custom variables available to tweak Shadow components.</p><p>In addition, Ionic 5 also shipped a new and vibrant color palette style guide including a set of colors specially tailored for <a href="https://ionicframework.com/docs/theming/dark-mode">dark mode support</a>.</p><h3>Ionicons 5</h3><p>One of the highlights of this new release is the new version of Ionicons, the amazing web component icons library. As well as its predecessor, Ionicons 5 is distributed as a set of SVG icons instead of a font icon, for much better performance and less complexity.</p><p>With over 1200 icons, Ionicons 5 brings a massive number of new icons. Additionally, each icon now comes in three distinct weight variants outline, fill, and sharp. With this new approach, the set of icons position itself as a system inspired by the best of both (Material Design and iOS) platforms.</p><p>I have to say, though, that if you are migrating from Ionicons 4, there are some minor <a href="https://github.com/ionic-team/ionicons/blob/master/CHANGELOG.md#breaking-changes">breaking changes</a>.</p><h3>Compatibility with other Frameworks</h3><p>As you may know, apart from the original Angular official support (@ionic/angular), Ionic released an official react integration (@ionic/react) and they are working on a Vue integration as well (@ionic/vue, still in beta. <a href="https://twitter.com/Ionicframework/status/1229431909815640065">They are waiting</a> till Vue 3 stabilizes).</p><p>This multi-framework approach is possible thanks to the web components core implementation of the framework (@ionic/core). This means you can target almost any platform (desktop, mobile, browser, native) using the same toolset.</p><p>Also, I want to mention <a href="https://ionicthemes.com/tutorials/about/native-cross-platform-web-apps-with-ionic-capacitor">Ionic Capacitor</a>, a cross-platform app runtime that makes it easy to build web apps that run natively on iOS, Android, Electron, and the web. Lately, we have been using it on every Ionic project and we are very happy with it. If you are new to the Ionic ecosystem learn more about the <a href="https://ionicthemes.com/tutorials/about/native-cross-platform-web-apps-with-ionic-capacitor#capacitor-vs-cordova">main differences between Capacitor and Cordova</a>. It’s a really great contribution from the Ionic Team.</p><h3>Performance</h3><p>For all of you Angular developers out there, Ionic 5 brings great news regarding performance and optimizations to your Ionic Angular apps. The new <a href="https://ionicframework.com/blog/angular-9-0-0-and-ivy-improvements/">Angular renderer (Ivy)</a> enables apps to only require pieces of the renderer that they actually need, instead of the whole thing. This translates into smaller output files and consequently better load performance.</p><h3>Angular 9?</h3><p>Angular 9 and Ivy are supported in Ionic 5, however, they are optional. In fact, if you create a new Ionic app right now using the CLI, it will use Angular 8. If you want to upgrade to Angular 9 make sure to follow <a href="https://update.angular.io/">this guide</a>.</p><h3>Developer Experience</h3><p>Starter templates are a great way to kickstart your project. The bare bones, basic starters that come with Ionic have been redesigned to match the new Ionic 5 UI.</p><blockquote><em>The default starters are very limited in the functionality they showcase, that’s why we built a more in-depth starter for this post.</em></blockquote><p>You can download the free code of this Ionic 5 starter app in <a href="https://ionicthemes.com/tutorials/about/ionic5-tutorial-migration-and-starter">IonicThemes website</a>.</p><p><strong>If you are more serious about your Ionic endeavor, or if you want to start creating your Ionic Framework app but don’t know how to start, I suggest you try our most advanced ionic starter template: </strong><a href="https://ionicthemes.com/product/ionic5-full-starter-app"><strong>Ionic 5 Full Starter App</strong></a><strong>.</strong></p><p>Use it to jump start your Ionic app development and save hundreds of hours of design and development. With more than 100 carefully designed views and components, it will help you grasp best practices and the new concepts of Ionic 5 development.</p><p><a href="https://ionicthemes.com/product/ionic5-full-starter-app"><strong>Try it both as a native app or as a full PWA on your mobile browser!</strong></a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*U5YzHQFXTQXjlzc4LK75AA.png" /><figcaption>ionic template</figcaption></figure><h3>How to migrate from Ionic 4 to Ionic 5?</h3><p>As usual, we get our hands on before writing any review or tutorial. In our case we choose to migrate our most complete starter template before writing this review. Considering <a href="https://ionicthemes.com/product/ionic5-full-starter-app">Ionic Full Starter App</a> a mid size project that touches almost every corner of the Ionic framework, its components and features, <strong>we can confidently say that migrating from Ionic 4 to Ionic 5 is a breeze.</strong></p><p>I’m not going to lie to you, there are some breaking changes, but the Ionic Team did a great job documenting everything with lots of details and examples. In the following section I’m going to mention these breaking changes and point you in the right direction to resolve them.</p><blockquote><a href="https://ionicthemes.com/tutorials/about/ionic5-tutorial-migration-and-starter#how-to-migrate-from-ionic4-to-ionic5">Get the complete migration guide from ionic 4 to ionic 5.</a></blockquote><h3>Final thoughts on Ionic Framework 5</h3><p>I hope this article helped you get to know the highlights of the new Ionic 5 release, and above all to calm fears about the migration process. As mentioned above, migrating from Ionic 4 to Ionic 5 does not mean rewriting your application, and can be easily achieved with minor effort.</p><p>If you want to learn more about Ionic Framework, at IonicThemes we have lots of <a href="https://ionicthemes.com/tutorials/tag/ionic-4">free ionic 5 tutorials</a> with practical examples so you can learn how to create the best mobile apps using Ionic Framework.</p><blockquote><em>Remember that if you need help starting your Ionic 5 application we have built a </em><a href="https://ionicthemes.com/product/ionic5-full-starter-app"><em>super complete starter app</em></a><em> that will help you in all the steps of developing an Ionic and Angular application. You can </em><a href="https://ionicthemes.com/product/ionic5-full-starter-app/live-preview"><em>try the demo</em></a><em> to see all the beautiful pages and components we built using Ionic Framework 5.</em></blockquote><p><strong>Need help with Ionic 5? Leave me a comment.</strong></p><p><em>Originally published at </em><a href="https://ionicthemes.com/tutorials/about/ionic5-tutorial-migration-and-starter"><em>https://ionicthemes.com</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=aeae53fdc28e" width="1" height="1" alt=""><hr><p><a href="https://medium.com/learn-ionic-framework/whats-new-in-ionic-5-free-example-starter-to-jump-start-your-ionic-app-development-aeae53fdc28e">What’s new in Ionic 5? — Free example starter to jump start your ionic app development!</a> was originally published in <a href="https://medium.com/learn-ionic-framework">Learn Ionic Framework</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Best Ionic Template — Build an outstanding Ionic Framework 5 App!]]></title>
            <link>https://medium.com/learn-ionic-framework/ionic-4-starter-app-f688aeef4978?source=rss----daeb57a79fec---4</link>
            <guid isPermaLink="false">https://medium.com/p/f688aeef4978</guid>
            <category><![CDATA[ionic]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[angular]]></category>
            <category><![CDATA[capacitor]]></category>
            <category><![CDATA[ionic-framework]]></category>
            <dc:creator><![CDATA[Dayana Jabif]]></dc:creator>
            <pubDate>Sun, 14 Jul 2019 23:45:57 GMT</pubDate>
            <atom:updated>2020-06-12T19:07:37.948Z</atom:updated>
            <content:encoded><![CDATA[<h3>Best Ionic Template — Build an outstanding Ionic Framework 5 App</h3><p>At IonicThemes we strongly believe in the power of templates. Our templates are designed as modular starter apps to help you build your own app. They can be easily customized to create a unique Ionic app in record time, allowing you to focus on the uniqueness of your app and avoiding to be bogged down with time consuming repetitive coding.</p><blockquote>“IonicThemes helps you get a real app up and running fast by handling all the boilerplate and design that normally takes weeks. Any Ionic developer should consider getting one and getting to work that much more quickly!“</blockquote><blockquote>Max Lynch — CEO at Ionic Framework</blockquote><p>We strive to create the best Ionic templates in the market, both in terms of code and design. We dedicate hundreds of design and development hours creating and testing them.</p><p><strong>Thousands of developers have used our templates with different purposes. Some of them are:</strong></p><ul><li>To improve their Ionic skills</li><li>To learn Ionic Framework by example (by seeing how we solved common problems)</li><li>To save time and be able to meet the deadline</li><li>To get beautifully designed screens</li><li>To get ready-made ionic features and components</li></ul><p>Our latest and most complete Ionic 5 Template is <a href="https://ionicthemes.com/product/ionic5-full-starter-app-pro-version">Ionic 5 Full Starter App</a> and recently we released the PRO version, with more screens and functionalities.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttps%2Fwww.youtube.com%2Fembed%2FVd4K9fzRk5I%3Ffeature%3Doembed&amp;url=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttp%2Fwww.youtube.com%2Fwatch%3Fv%3DVd4K9fzRk5I&amp;image=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttps%2Fi.ytimg.com%2Fvi%2FVd4K9fzRk5I%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="640" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/910b84f606c8d6c341152ee9a3a8a560/href">https://medium.com/media/910b84f606c8d6c341152ee9a3a8a560/href</a></iframe><p>This template is built to guide you in the development process, exposing difficult knowledge through practical examples. Created with performance and ease of development in mind, this Ionic starter app is something you will love. It includes all the components that you might need inside an ionic framework project and a detailed documentation on how to get started.</p><h3>Try Ionic 5 Full Starter App</h3><p>You can try how this Ionic App looks and feels in your device.</p><ul><li><a href="https://ionicthemes.com/product/ionic5-full-starter-app-pro-version/live-preview">Live Preview</a></li><li><a href="https://ionic-4-full-starter-app-docs.ionicthemes.com/progressive-web-app#how-to-install-this-template-as-a-pwa-on-your-phone">Try as a PWA</a></li><li><a href="https://ionicthemes.s3-us-west-2.amazonaws.com/apks/ionic5-full-starter-app-pro.apk">APK</a></li></ul><h3>Save time with these ready-made Ionic features</h3><h4>All in with Ionic 5 and Angular 9</h4><p>This Ionic Template includes lots of Ionic components coded the angular way and features that you will love.</p><h4>100% Flexible and Customizable</h4><p>The starter includes lots of pages, features and components but you are free to use just what you need and delete the code you don&#39;t. The code structure is super modularized so you will find easy to modify the code to fit your needs.</p><h4>CSS variables for the win</h4><p>CSS Variables provide easy customization of an application and allow a value to be stored in one place, then referenced in multiple other places. So, for example if you want to change the colors of your app, by just changing some variables your app will have the desired colors in just a few seconds!</p><h4>Detailed documentation and Showcase</h4><p>The template includes a super detailed <a href="https://ionic-4-full-starter-app-docs.ionicthemes.com/">documentation </a>as well as an <a href="https://ion4fullpwa.firebaseapp.com/showcase/custom-components">online showcase</a> to help developers use the custom component the template offers.</p><h4>PWA ready</h4><p>Ionic Framework is a step forward for Progressive Web Apps, that&#39;s why we are building this new ionic template with 100% support for PWA. <a href="https://ionicthemes.com/tutorials/about/the-complete-guide-to-progressive-web-apps-with-ionic4">Learn more about PWA with Angular and Ionic.</a></p><p>You will be able to use this Ionic 5 starter as an iOS app, an Android app, a web app or as a PWA! Too many options, right?</p><p>For a web app to be considered a PWA, <a href="https://ionicthemes.com/tutorials/about/the-complete-guide-to-progressive-web-apps-with-ionic4#embracing-progressive-web-apps-with-ionic">it needs to comply with 10 principles</a>. You can see how this Ionic Framework 5 app <a href="https://ionicthemes.com/product/ionic4-full-starter-app">addresses each of them</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zRWKUdLPs40s0GsK12Lusw.jpeg" /><figcaption>ionic template</figcaption></figure><h4>App Shell</h4><p>An application shell (or app shell) architecture is one way to build a <a href="https://ionicthemes.com/tutorials/about/ionic-framework-development-glossary#progressive-web-apps">Progressive Web App</a> that reliably and instantly loads on your users’ screens, similar to what you see in native apps.</p><p>The shell is the minimal CSS, HTML and JavaScript required to power the user interface and when cached offline can ensure instant, reliably good performance to users.</p><p>The main goal of the app shell is to improve our app’s perceived performance.</p><p>We created a complete post explaining the benefits of using app shell in ionic apps.</p><p><a href="https://ionicthemes.com/tutorials/about/improved-ux-for-ionic-apps-with-skeleton-loading-screens">Improved UX for Ionic apps with Skeleton Loading Screens</a></p><p>We included the app shell pattern in this ionic template because we believe it is a step forward in terms of user experience. However, if you don’t want to use it, you are free to remove it from your app. We will explain how to do it in the template documentation.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/691/1*n9JAstSuQ-QFkMXLx3qosA.png" /><figcaption>ionic app shell</figcaption></figure><h4>Forms and Validations</h4><p>Forms are the pillar of many business applications. You can use forms to perform countless data-entry tasks such as: login, submit a request, place an order, book a flight or create an account.</p><p>The main purpose of forms is data collection so we need to provide a good experience so the user doesn’t get frustrated.</p><p>In this Ionic theme we included different types of form validations with Ionic and Angular such as: <strong>password and confirm password validation, international phone validation, email format validation and username validator</strong>. You will <a href="https://ionicthemes.com/tutorials/about/forms-and-validation-in-ionic">learn how to use Angular custom validators</a> and how to use Angular Reactive Forms to create your own validators.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/692/1*kq8Niwsm3_VUYmWd3uSuDA.png" /><figcaption>ionic forms and validations</figcaption></figure><h4>Different types of Navigations</h4><p><a href="https://ionicthemes.com/tutorials/about/ionic-navigation-and-routing-ultimate-guide">Navigation</a> is one of the most important parts of an app. Solid navigation patterns help us achieve great user experience while a great router implementation will ease the development process and at the same time will make our apps discoverable and linkable.</p><p>As the new Ionic framework position itself as the best tool to build Progressive Web Apps, and the Discoverable and Linkable principles are fundamental to PWAs, it is clear why the new Ionic Navigation relies on the Angular Router.</p><p>The Angular Router is a solid, URL based navigation library that eases the development process dramatically and at the same time enables you to build complex navigation structures. In addition, the Angular Router is also capable of Lazy Loading modules, handle data through route with Route Resolvers, and handling Route Guards to fine tune access to certain parts of your app.</p><p>This Ionic 5 starter app template features many different examples of navigation within a mobile app such as: <strong>Tabs, Side Menu, Lazy Loading and Angular Resolvers.</strong></p><h4>Firebase Integration</h4><p><a href="https://ionicthemes.com/tutorials/about/building-a-ionic-firebase-app-step-by-step">Firebase is a popular tool</a> that helps you build apps fast, without managing infrastructure and includes a powerful Database as a Service solution. We built a Firebase Integration for this Ionic Template that will show you how to build an advanced CRUD with Firestore as well as how to query your collections. It includes advanced examples with nested relations.</p><blockquote>Also, we recently added Firebase Authentication with different providers such as facebook, twitter and google.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/691/1*ECGInZfFQrU1P5m4AgZ4lg.png" /><figcaption>ionic firebase</figcaption></figure><h4>Other Integrations</h4><p>Sometimes our apps need more features that why we added the most required ones to this PRO version.</p><p>Translating your ionic app into your desired language and creating a fully multi language app is now possible with this version of the template.</p><p>Videos are very important in current apps that’s why we added a video playlist that you can use to play your own videos into an ionic app.</p><p>Also, we added a customizable Google Map and Geolocation using <a href="https://capacitor.ionicframework.com/docs/apis/geolocation/">Capacitor Geolocation API</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/691/1*HJLr5Td4AYLl6bNiSA9uXQ.png" /><figcaption>ionic multi language, ionic maps and ionic video playlist</figcaption></figure><h4>Ionic Capacitor</h4><p><a href="https://ionicthemes.com/tutorials/about/native-cross-platform-web-apps-with-ionic-capacitor">Capacitor</a> is a cross-platform app runtime that makes it easy to build web apps that run natively on iOS, Android, Electron, and the web.</p><p>It provides a consistent, web-focused set of APIs that enable an app to stay as close to web-standards as possible, while accessing rich native device features on platforms that support them.</p><p>This Ionic 5 template is built using Capacitor and also shows how to use some of the APIs it provides.</p><h4>Different Categories</h4><p>We carefully designed and coded 5 different and complete categories: Travel, Food, Fashion, Deals and Real State.</p><p>Each category has a Listing view and a Details view. Each of these pages is different and has different and unique components that you can reuse within your Ionic framework app.</p><p>Some of the components you will find in this section are: <strong>Cards, Lists, Sliders, Maps, Tags, Text Blocks, Images, Grids, Progress Bar, Buttons, Custom Icons, Buttons, Modal, Alerts, Different types of layouts to display your data in a beautiful and organized way, Lots of beautiful App Shells and more!.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/691/1*xYPcfziZXhDjlq_82bnn-g.png" /><figcaption>Travel Category</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/693/1*u28enJqLDIIFffV5S3K6Nw.png" /><figcaption>Fashion Category</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/693/1*fn6SFaGK739EgoXFj75rhg.png" /><figcaption>Food Category</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/692/1*wylSF5tElbIXZM5Z6AAXVA.png" /><figcaption>Deals Category</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/691/1*yZC2rmqVXBZLQG6JP78cTw.png" /><figcaption>Real State Category</figcaption></figure><h3>Some Testimonials</h3><p><em>“The Ionic 5 starter app is exactly what I’ve been seeking.<br>The people at Ionic Themes team put together a rock-solid starter app including clean code and easy to understand documentation … not to mention unmatched customer support/communication.” — </em>Jeff — Lead Developer</p><p><em>“Being a solo developer, I wouldn’t have been able to deliver my client’s app on time without this template. With continuous updates and enhancements you are not wasting your money buying this template.” — </em>Saud — Software Developer</p><p><em>“I am very happy with IonicThemes, specially with the customer service they provide and their quickness in resolving issues.<br>Will definitely purchase again in the future. Looking forward to new products”. — </em>Jas — Tech Guy</p><p><strong>Want to get this ionic framework starter app? You will not regret!</strong></p><p><a href="https://ionicthemes.com/product/ionic5-full-starter-app-pro-version">Ionic 5 Full Starter App &amp; PWA | PRO Version | Ionic Templates</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f688aeef4978" width="1" height="1" alt=""><hr><p><a href="https://medium.com/learn-ionic-framework/ionic-4-starter-app-f688aeef4978">Best Ionic Template — Build an outstanding Ionic Framework 5 App!</a> was originally published in <a href="https://medium.com/learn-ionic-framework">Learn Ionic Framework</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Ionic Capacitor — What you need to know.]]></title>
            <link>https://medium.com/learn-ionic-framework/what-you-need-to-know-about-ionic-capacitor-f76de56321d7?source=rss----daeb57a79fec---4</link>
            <guid isPermaLink="false">https://medium.com/p/f76de56321d7</guid>
            <category><![CDATA[angular]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[ionic]]></category>
            <category><![CDATA[capacitor]]></category>
            <category><![CDATA[cordova]]></category>
            <dc:creator><![CDATA[Dayana Jabif]]></dc:creator>
            <pubDate>Thu, 13 Jun 2019 20:41:56 GMT</pubDate>
            <atom:updated>2019-11-10T13:18:18.127Z</atom:updated>
            <content:encoded><![CDATA[<h3>Ionic Capacitor — a new way to build apps</h3><h4>In this post you will learn about Capacitor, a tool created by <a href="https://medium.com/u/231a083a1e9">The ionic team</a> to build native cross-platform web applications for Android, iOS, Electron and the web.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IvMWJALPj007g3HZy-hSmQ.png" /></figure><h3>What is Capacitor?</h3><p>Capacitor is a cross-platform app runtime that makes it easy to build web apps that run natively on iOS, Android, Electron, and the web. It was created -and is maintained- by the Ionic Framework team. The first stable version (1.0) <a href="https://blog.ionicframework.com/announcing-capacitor-1-0/">was released at the end of May 2019</a>.</p><p>In this post I will try to give you a good introduction about what Capacitor is and why did the Ionic team create it. Also, we will go through the main differences between Capacitor and Cordova and get to know more about Capacitor plugins. We will be also talking about the migration strategy, why should you consider migrating and what’s involved at a high level in the migration.</p><p>As a side note, I want to tell you that I did the migration to Capacitor of our latest <a href="https://ionicthemes.com/product/ionic4-full-starter-app">Ionic 4 starter app</a> and it was super easy and straightforward. I did not experience any issues and I’m super happy with the new app structure without Cordova. So, without further ado, let’s start!</p><blockquote><em>Capacitor provides a consistent, web-focused set of APIs that enable an app to stay as close to web-standards as possible, while accessing rich native device features on platforms that support them.</em></blockquote><p>With Capacitor, adding native functionality to our apps can be easily done using a simple Plugin API for Java on Android, JavaScript for the web and Swift on iOS. We can say that Capacitor is a spiritual successor to Apache Cordova and Adobe PhoneGap.</p><p>It’s important to mention that Capacitor can work with any web project, it’s not Ionic specific, and is version independant (works with Ionic v1 to v4 and anything that comes in the future). It can be used as a drop in to any existing modern JavaScript project.</p><blockquote>Capacitor has a “Code once, configure everywhere” mantra and in this post we will explain why.</blockquote><h3>How does Capacitor fit in the app development ecosystem?</h3><h4>What is Ionic Framework?</h4><p>In case you’re kind of new to Ionic Framework, let me give you a quick intro. It’s a mobile-ready and cross-platform UI library and toolkit that works everywhere; any platform, any device, any framework. You can reuse your existing web skills; HTML, CSS and JavaScript to build apps for IOS, Android, Electron and <a href="https://ionicthemes.com/tutorials/about/ionic-framework-development-glossary#progressive-web-apps">PWAs</a>. You can create one codebase that can go across all these platforms just using your web skills and target the different native APIs and features, like Geolocation, Camera, Bluetooth.</p><p>If you are new to this world I suggest you to read more about <a href="https://ionicthemes.com/tutorials/about/ionic-framework-introduction-and-key-components">Ionic’s key components</a>. Also, when it comes to PWAs, we wrote a <a href="https://ionicthemes.com/tutorials/about/the-complete-guide-to-progressive-web-apps-with-ionic4"><strong>Complete Guide To Progressive Web Apps with Ionic 4</strong></a><strong> </strong>that you may want to bookmark for a future reading because we deeply explain what are PWAs, why you should definitely consider them for your next project, and also show how easy is to build a feature complete PWA with Ionic 4!</p><p><a href="https://ionicthemes.com/tutorials/about/the-complete-guide-to-progressive-web-apps-with-ionic4">The Complete Guide To Progressive Web Apps with Ionic 4</a></p><h4>What is a hybrid Application?</h4><p>An Hybrid Application is a web app built with the web skills you already have, and then packaged inside of a real native app shell. With this approach you get full access to all the different device functionalities while your Ionic or Web app is running inside of a web-view within that native app. For end users it will still be a native app, enabling you to run your code everywhere and reach potentially millions of users.</p><h4>What about Cordova?</h4><p>Up till now, Phonegap or <a href="https://ionicthemes.com/tutorials/about/ionic-framework-development-glossary#cordova">Cordova</a>, (they’re basically synonymous) has been the native wrapper for Ionic apps.</p><p>The team behind <a href="https://cordova.apache.org/">Cordova</a> created it in 2008. Cordova really helped developers with web skills that wanted to reuse them and, especially get onto the exciting mobile platforms that everyone has these days.</p><p>Cordova’s mantra is <strong>“Write once, Run everywhere”</strong>, and that’s what Ionic has been all about since the beginning. Cordova is fully open source and backed by a great community but lately it had some challenges keeping up to date with the latest changes of the native platforms. iOS and Android are constantly undergoing different changes, whether that’s new operating system updates or new hardware. These affects Cordova and any Ionic app as well. That’s why the Ionic team had to keep up with these kinds of things and move fast to ensure that they were deploying and supporting these different features.</p><p>And also, on the more native side of things, more modern plugin system capabilities with <a href="https://cocoapods.org/">Cocoa Pods</a> and <a href="https://gradle.org/">Gradle</a> which are dependency management tools that hasn’t been supported by Cordova. As well as wanting to use more modern native languages, like Swift and Kotlin. So, the team at Ionic thought, it was a good idea to create a spiritual successor to Cordova that could use all these modern native tools and provide just really an overall better developer experience. And their solution to that is Capacitor. So, let’s dig into what that looks like.</p><blockquote>If you want to start creating your Ionic Framework app but don’t know how to start, I suggest your to try <a href="https://ionicthemes.com/product/ionic4-full-starter-app">Ionic 4 Full Starter App</a>. It’s an ionic 4 app that you can use to jump start your Ionic Framework development and <strong>save yourself hundreds of hours of design and development.</strong></blockquote><p><a href="https://ionicthemes.com/product/ionic4-full-starter-app">Ionic 4 Full Starter App | Ionic 4 Mobile &amp; PWA Template| Ionic Templates</a></p><p>It includes more than 100 carefully designed views and components. It has full support for PWA with Angular. <strong>Try it on your phone as a native app or as a PWA to see the magic!</strong></p><h3>Welcome Capacitor to the Ionic Ecosystem</h3><blockquote><em>At the end of the day, Capacitor has the same type of goals as Cordova.</em></blockquote><p>Capacitor is a cross-platform runtime created by the Ionic team that allows you to target different types of native platforms like iOS, Android, the desktop using Electron and the Web. Traditionally, Cordova has had bad support for the web but Ionic promises to solve this with Capacitor.</p><p>Capacitor has first-class support for <a href="https://ionicthemes.com/tutorials/about/the-complete-guide-to-progressive-web-apps-with-ionic4">Progressive Web Apps</a> and native apps. That means that Capacitor’s plugin bridge supports running in either a native context or in the web, with many core plugins available in both contexts with the exact same API and calling conventions. This means you’ll use @capacitor/core as a dependency for both your native app and your Progressive Web App, and Capacitor will seamlessly call web code when required and native code when available.</p><p>The ability to have multiple implementations for an API is a clear benefit of Capacitor because, let’s say we want to use the Camera plugin, the installed native app will use the native implementation while the PWA will use the web implementation, all with the same codebase.</p><h3>How does Capacitor plays with Cordova?</h3><p>For the majority of plugins today, Capacitor has full backward compatibility. However, there are some of them that don’t work for various legacy technology reasons.</p><p><strong>One of the things Capacitor wants to do is staying as close to the native browser capabilities as possible.</strong> This will allow them to ensure a great stability and maintainability because by staying close to the web standards, they can ensure that things will work for a long time to come. And this is a very important point for us as developers.</p><blockquote><em>Capacitor’s mantra is </em><strong><em>“Code once, Configure everywhere”. </em></strong><em>And this is because they are embracing more of the native modern tooling, which they claim it will help us maintain our projects a lot easier than in the past with Cordova.</em></blockquote><h3>What are the differences between Cordova and Capacitor?</h3><p>There are two main major points when doing a Capacitor VS Cordova comparison: <strong>Native Project Management</strong> and <strong>Plugin and CLI Management</strong>. Let’s go through each of them to see the main changes and their benefits.</p><h4>Native Project Management</h4><p>Using Capacitor will result in some interesting architecture design changes, comparing to what we were used with Cordova, but the Ionic team believes this will serve everyone well for the long-term. Let’s see why.</p><h4><strong><em>Change #1 — source assets versus build time assets</em></strong></h4><p><strong>Capacitor trates the native projects</strong> that are generated such as iOS, Android, Electron, <strong>as code that you actually check in and maintain</strong> and they’re essentially first-class citizens in that sense.</p><p>This is a clear benefit comparing with Cordova, where when you’re interacting with the native projects that are generated, for example to add plugins, or to make changes, they can get wiped away or end up in different states of use and this can be hard to maintain.</p><p>Another benefit of having real native projects is that it makes it easier to <strong>add custom native code</strong> to them. You just need to open the project into its native IDEs and make the changes you need without having to do this through a plugin.</p><p>Also, another benefit is <strong>the ability for native mobile teams to work with web teams</strong>, because you no longer have a conflict where both teams are making changes in the same files. They’re separate web and native projects, so you can be developing over time.</p><h4><strong><em>Change #2 — Custom configurations</em></strong></h4><p>Capacitor is pushing us towards using the platform’s specific IDE; Xcode for iOS and Android Studio for Android. This means no longer we’re going to have an abstracted layer, which today for Cordova is config.xml. So, the benefit here is that by not having that abstraction over the native layers, it gives us far <strong>more control and visibility into the native project changes</strong> and overall leads to a better experience maintaining apps over time.</p><p>All of us have probably run into situations where you come back to an app after some time and try to rebuild it and update all the dependencies, and just have it simply not work or not build in the first place. So, Capacitor is trying to make that experience a lot smoother and better for us.</p><p>Also, another benefit is that if you do run into native issues, such as built or configuration issues, it’ll be much easier to troubleshoot because we can have direct access to the native projects and therefore, searching online in different forums for that specific problem.</p><h4>Change #3 — Use Platform Specific IDEs</h4><p>The Ionic Team behind Capacitor ensures that by embracing the native platform IDEs it will just lead to a better experience for everyone.</p><h4>Plugin and CLI Management</h4><p>We also have plugin and CLI (Command Line Interface) management changes.</p><h4>Change #1 — Built as Frameworks (iOS) and Libraries (Android)</h4><p>The main change for plugin development and maintainability is building them with more modern capabilities, as frameworks on iOS and Libraries on Android. There are a lot of different things that go into that. For example, you no longer have to copy plugin files directly into your project and in fact, they’re full fledge libraries and just code that can be developed outside your Ionic app.</p><p>Plugins in Capacitor enable JavaScript to interface directly with Native APIs. When it comes to working through and creating your own plugins, Capacitor has a great plugin generation command and other tooling that is explained in the <a href="https://capacitor.ionicframework.com/docs/plugins">documentation</a>. Capacitor auto generates JavaScript hooks on the client, so most plugins only need to build a native Java plugin for Android and a Swift/Obj-C one for iOS. <a href="https://capacitor.ionicframework.com/docs/plugins#getting-started">Using the CLI to generate your own Capacitor plugins</a> is very easy.</p><p>One of the benefits of using this approach, is to have less error prone plugins and to make it easier to find help in the community for each platform when you’re working on troubleshooting plugins.</p><h4>Change #2 — Registers and exports all JavaScript for every plugin at runtime</h4><p>Additionally, Capacitor registers and exports all JavaScript for each plugin based on the methods it detects at runtime. This means that <strong>all of your code is available right away at runtime when your app starts out</strong>. So, no more need for the device ready event, which if you’ve worked with Cordova, you’ve probably run into that issues with trying to use different plugins right away and having your app crash or not work well and being confused about that.</p><h4>Change #3 — Capacitor CLI gets installed locally into each project</h4><p>Cordova typically gets installed globally on your machine while the Capacitor CLI gets installed locally into each project. This makes it easier to manage different versions of Capacitor across all of your different apps.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/750/0*IQgzkEVwFJWeXjdi.jpeg" /><figcaption><a href="https://ionicthemes.com/product/ionic4-full-starter-app">https://ionicthemes.com/product/ionic4-full-starter-app</a></figcaption></figure><h3>Migration Strategy. Should you migrate?</h3><p>The first thing to mention is that the migration isn’t compulsory so you are free to choose what you want to do with your project. The effort involved in the migration will largely depend on the complexity of the app but you can do it progressively over time so there’s no rush and also no reason to freak out.</p><p>Also, it’s important to mention that Capacitor isn’t specific to Ionic projects, it works with all web projects.</p><p><strong>Migrating from Cordova to Capacitor can occur over time or can be fully replaced in many cases. The effort involved will largely depend on the complexity of the app.</strong></p><p>If you have an existing app that’s using Cordova, let’s talk a little bit about the migration strategy. So, why migrate? What’s involved at a high level?.</p><blockquote><em>It’s really about long-term stability and peace of mind.</em></blockquote><p>Now, that the Ionic team released this tool, we can expect updates and releases a lot quicker than the Cordova ecosystem.</p><p>Also, remember we mentioned that <strong>Capacitor has Cordova backward compatibility</strong> so adding it to a Cordova project should just work and you get all the benefits of working with native projects.</p><p>The Ionic team has been a long-term open-source contributor to the Cordova community and they say that this isn’t going to change for a long time to come. <strong>So, no worries, you can still stay using Ionic Framework + Cordova if you don’t want to change.</strong> But that said, we do feel that Ionic and Capacitor are the future for building modern web apps and cross-platform hybrid apps.</p><h3>Should you migrate? My personal opinion</h3><p>As we mentioned above, there are <a href="https://ionicthemes.com/tutorials/about/native-cross-platform-web-apps-with-ionic-capacitor#capacitor-vs-cordova">differences that Capacitor has over Cordova</a> both regarding the Native Project Management and the Plugin and CLI Management. And I think that these differences and new approaches can be either a benefit or an opportunity for you, depending on your background and your current development skills. Let me explain why.</p><p>If you choose to migrate to Capacitor, <strong>it’s important you understand that you will be dealing directly with the native platform (ios or android), their specific configurations, issues, errors, community, building processes, IDEs, languages, and their own specific concepts.</strong> Capacitor requires you to be a lot more involved in the native project configuration than with Cordova so at the end of the day, if you are a web developer with no native skills, it’s up to you if you want to invest the required time and effort in learning these new concepts.</p><p>On the other hand, if you are a native developer you will love working with Capacitor because you will be working directly with the native apps. So for native devs it will be a no brainer decision.</p><p>I know many people started using Ionic Framework because they were web developers wanting to create mobile apps, myself included. Capacitor brings us the opportunity to expand our knowledge on mobile apps inducing us to learn these new concepts and I think this is great. But if you are afraid to make the change now, or you don’t have the time to invest in learning this new flow, it’s totally fine. You can do it when you are ready. Ionic apps will continue to work with Cordova in the same way they worked before Capacitor.</p><p>So, to sum up, migrating your Ionic app from Cordova to Capacitor has both pros and cons (or as I like to see them, opportunities). It brings a lot of benefits when building cross platform web apps, it’s based in a “Code once, configure everywhere” philosophy, it’s optimized for Ionic Framework apps, but, migrating is not a must, it can be done over time, the effort depends on the complexity of your app and, if you have no native skills, it requires you to invest time and effort to get into these new workflows.</p><blockquote><em>That’s why we have decided that for our </em><a href="https://ionicthemes.com/product/ionic4-full-starter-app"><em>Ionic 4 templates</em></a><em>, we will provide both options so people can choose what suits best for them. When you get one of our ionic 4 starters you will find the same app configured both with Cordova and another one with Capacitor.</em></blockquote><p><a href="https://ionicthemes.com/product/ionic4-full-starter-app">Ionic 4 Full Starter App | Ionic 4 Mobile &amp; PWA Template| Ionic Templates</a></p><h3>Cordova to Capacitor migration process</h3><p>Capacitor has some dependencies depending on which platforms you’re targeting and which operating systems you are developing on.</p><p><strong>To read more about how to migrate please </strong><a href="https://ionicthemes.com/tutorials/about/native-cross-platform-web-apps-with-ionic-capacitor#cordova-to-capacitor-migration-process"><strong>follow this guide</strong></a><strong>.</strong></p><h3>Final thoughts about Capacitor and Ionic</h3><p>Using Ionic and Capacitor together is the way to build the best app experience possible, since Ionic Framework provides UI and UX enhancements that Capacitor does not have. Additionally, it works with your favorite web app framework, including Angular, React, and Vue.</p><p>With the release of Capacitor, Ionic now controls almost all of its stack. When you build an Ionic app today, they now control the native runtime layer (Capacitor), the UI controls (Ionic Framework), and the “framework” used to build the controls (web components powered by <a href="https://ionicthemes.com/tutorials/about/ionic-framework-development-glossary#stencil">Stencil</a>). This is significant because if there’s an issue in any part of the stack that Ionic controls, they can fix it right away. The only part Ionic doesn’t control is the frontend framework you use on top (Angular, React, Vue, or plain JavaScript).</p><p>Capacitor embraces this idea of <strong>“Code once, configure everywhere”</strong> because configuration is managed per-platform instead of in an abstracted system like a config.xml in Cordova. As we saw in this post, this is an important point, because it means that Capacitor requires you to be more involved in the native project configuration than with Cordova. Although it may be scary at the beginning, this approach makes it easy to follow existing Native iOS/Android guides, get help on Stack Overflow, and have full control over your project.</p><p>Capacitor has first-class support for <a href="https://ionicthemes.com/tutorials/about/the-complete-guide-to-progressive-web-apps-with-ionic4">Progressive Web Apps</a> and native apps. That means that Capacitor’s plugin bridge supports running in either a native context or in the web, with many core plugins available in both contexts with the exact same API and calling conventions. This means you’ll use @capacitor/core as a dependency for both your native app and your Progressive Web App, and Capacitor will seamlessly call web code when required and native code when available.</p><p>Since Cordova is such a hugely popular framework with a massive ecosystem of plugins to access various native functionality, Capacitor is aiming to have backward compatibility with existing Cordova plugins. This means that if you are using Capacitor, you should be able to use any existing Cordova plugin with it.</p><p>Doing the migration from Cordova to Capacitor isn’t compulsory so you are free to choose. The effort involved in the migration will largely depend on the complexity of your app but you can do it progressively over time so there’s no rush and also no reason to freak out.</p><p>If you want to see an example app built with Ionic 4 and Capacitor you can check <a href="https://capacitor.ionicframework.com/docs/guides/ionic-framework-app">Building an Ionic Framework Camera App</a>. Also, the Ionic team also built another great example app using <a href="https://capacitor.ionicframework.com/docs/guides/push-notifications-firebase">Push Notifications with Firebase in an Ionic 4 Angular App</a>.</p><p>Hope this post helped you getting an idea of what Capacitor is and how to start using it to build your apps!</p><p><em>Originally published at </em><a href="https://ionicthemes.com/tutorials/about/native-cross-platform-web-apps-with-ionic-capacitor"><em>https://ionicthemes.com</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f76de56321d7" width="1" height="1" alt=""><hr><p><a href="https://medium.com/learn-ionic-framework/what-you-need-to-know-about-ionic-capacitor-f76de56321d7">Ionic Capacitor — What you need to know.</a> was originally published in <a href="https://medium.com/learn-ionic-framework">Learn Ionic Framework</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building a PWA with Ionic and Angular — step by step]]></title>
            <link>https://medium.com/learn-ionic-framework/want-to-build-progressive-web-app-with-ionic-v4-8f96c869bc2c?source=rss----daeb57a79fec---4</link>
            <guid isPermaLink="false">https://medium.com/p/8f96c869bc2c</guid>
            <category><![CDATA[progressive-web-app]]></category>
            <category><![CDATA[ionic]]></category>
            <category><![CDATA[angular]]></category>
            <category><![CDATA[ionic4]]></category>
            <category><![CDATA[pwa]]></category>
            <dc:creator><![CDATA[Dayana Jabif]]></dc:creator>
            <pubDate>Sat, 10 Nov 2018 17:46:17 GMT</pubDate>
            <atom:updated>2020-06-19T13:03:31.382Z</atom:updated>
            <content:encoded><![CDATA[<h3>Building a PWA with Ionic and Angular — step by step</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*SZCpfKr6ZTeK_-B1.png" /><figcaption>Build a Progressive Web App (PWA) with Ionic</figcaption></figure><p>Ionic is a step forward for Progressive Web Apps. It’s clear to us at <a href="https://ionicthemes.com">IonicThemes</a>, that the Ionic Framework team is doing a great job positioning themselves as the Framework of choice to build PWAs. 👏👏</p><p>This ionic guide is part of the complete tutorial published in <a href="https://ionicthemes.com/tutorials/about/the-complete-guide-to-progressive-web-apps-with-ionic4">IonicThemes blog </a>where you will learn what are Progressive Web Apps, why you should definitely consider them for your next project, and also how easy is to build a feature complete PWA with Ionic 5.</p><p>This post is part of the “Mastering Ionic Framework” series which deep dives into Ionic more advanced stuff. Don’t be afraid, if you are new to Ionic , I strongly recommend you to first read our <a href="https://ionicthemes.com/tutorials/about/ionic5-tutorial-migration-and-starter">introduction to ionic 5</a> previous tutorial.</p><p>In this series of posts we have already talked about <a href="https://ionicthemes.com/tutorials/about/ionic-framework-development-glossary#web-components">Web Components</a>, <a href="https://ionicthemes.com/tutorials/about/ionic-framework-development-glossary#shadow-dom">Shadow DOM</a>, <a href="https://ionicthemes.com/tutorials/about/ionic-framework-development-glossary#css-4-variables">CSS 4 Variables</a>, and <a href="https://ionicthemes.com/tutorials/about/ionic-framework-development-glossary#stencil">Stencil</a>. To complete the in-depth analysis of the new Ionic 4, besides talking everything about Progressive Web Apps in this post, we will also be addressing the new <a href="https://ionicthemes.com/tutorials/about/ionic-navigation-and-routing-ultimate-guide">Ionic Navigation using Angular Router</a> in our third and final post.</p><p>At <a href="https://ionicthemes.com">IonicThemes</a> we are big fans of <strong>Learning by example</strong>, that’s why all our ionic tutorials include a <strong>complete and free ionic code example</strong> <strong>that you can reuse in your ionic projects</strong>. We strive to create the best content for Ionic Framework, both <a href="https://ionicthemes.com/tutorials">tutorials</a> and <a href="https://ionicthemes.com/products">templates</a> to help the Ionic community succeed.</p><blockquote>We work towards empowering developers to achieve a free life through coding. That’s what motivates us at IonicThemes everyday.</blockquote><blockquote><em>Check out our detailed and professional </em><a href="https://ionicthemes.com/product/ionic4-full-starter-app"><em>templates</em></a><em> crafted with love and dedication to help you create better apps with Ionic Framework and supercharge your productivity.</em></blockquote><p><a href="https://ionicthemes.com/product/ionic5-full-starter-app">Ionic 5 Full Starter App | Ionic 5 Mobile &amp; PWA Template| Ionic Templates</a></p><h3>All in with Progressive Web Apps</h3><h4>What is a Progressive Web App?</h4><blockquote><strong>Progressive Web Apps are a synergy of the very best between Web and Native worlds.</strong></blockquote><p>PWAs are web applications that load like regular web pages or websites but can offer the user functionalities traditionally available only to native mobile applications such as push notifications, working offline, and device hardware access.</p><p>PWAs are useful to users from the very first visit in a browser tab as there’s no need to go to the App Store and install the app.</p><p>The initial ‘download’ of a PWA is minimal (a few kb’s with just the assets needed for the basic first interaction with the app) in contrast with native apps where you download the full app upfront (quite some MB of assets).</p><p>It’s worth mentioning that PWAs aren’t a new framework or technology. They are a set of best practices to make a web application function similar to a desktop or mobile application. The ideal situation would be to have an experience so seamless and uniform that the user is unable to tell the difference between a Progressive Web App and a native mobile app.</p><p>PWAs combine the open standards of the web offered by modern browsers to provide rich mobile experiences.</p><p>Instant or Progressive Web Apps are known for loading in record time even if the network is spotty since they use cache strategies. To keep customers engaged, they provide push notifications and have icons on the home screen, while still loading as a top level, full-screen experience.</p><p>The advantage of this new approach is that it <strong>lowers the cost of customer acquisition</strong>, while <strong>improving the conversion rates</strong>. It’s a great tool for on-boarding new customers, since the <strong>discoverability</strong> of the web makes them perfect for its advertising and social media communication purposes.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/560/0*Xuui9pAbhYN-scW3.png" /><figcaption>The Web is for audience reach and native apps are for rich experiences. Both are strategic. Both are valuable. So when it comes to mobile, it’s not Web vs. Native. It’s both.</figcaption></figure><h3>Why do we need Progressive Web Apps?</h3><p>To understand why we need progressive web apps, let’s first talk about some of the biggest challenges we are facing today with native and responsive web apps:</p><p><strong><em>Internet speed</em></strong>: depending on where you live internet may be a nightmare. You may have not realized this, but 60% of the world’s population is still using 2G internet.</p><p><strong><em>Slow website load</em></strong>: Do you know how long a user waits to close a website if it’s too slow? Only three seconds! 53% of users abandon a website if it loads too slow.</p><p><strong><em>High friction</em></strong>: People don’t want to install native apps. An average user installs 0 applications in a month. Contrast this with how many new web sites they visit each month. Also think about how many apps you downloaded and eventually ended up using just once or very few times?</p><p><strong><em>User engagement</em></strong>: Responsive mobile web sites have much more reach than native apps, however they lack basic functionalities like push notifications and offline support. That causes that most of the users of responsive web sites are not actively engaged compared to native apps engagement levels.</p><p>PWAs help solving these problems. Let’s go through the main benefits of using progressive web apps.</p><h3>Main benefits of using PWAs</h3><p><strong>Benefits first time seen on a web app:</strong></p><ul><li>Web app install banner prompt</li><li>Launch from user’s home screen</li><li>Full screen browser mode</li><li>Push notifications for web app</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/0*w2KrbRKp0h7rKAiI.png" /></figure><p><strong>CONNECTIVITY INDEPENDENT</strong> — Enhanced with service workers to work offline or on low-quality networks.</p><p><strong>APP LIKE</strong> — Feels like an app to the user with app-style interactions and navigation.</p><p><strong>FRESH</strong> — Always up-to-date thanks to the service worker update process.</p><p><strong>DISCOVERABLE</strong> — Due to the web nature of Progressive Web Apps, search engines are able to find them! This is super important for SEO purposes.</p><p><strong>Re-ENGANGABLE</strong> — Makes re-engagement easy through features like push notifications.</p><p><strong>INSTALLABLE</strong> — Allows users to “keep” apps they find most useful on their home screen without the hassle of an app store middleman.</p><p><strong>LINKABLE</strong> — Easily shareable via URLs.</p><h4>Integrated and Engaging User Experience</h4><p><strong>PWAs feel and behave like native apps</strong>. They sit in a user’s home screen, send push notifications like native apps, and have <a href="https://whatwebcando.today/">access to some device functionalities</a> like native apps. The experience feels seamless and integrated. Because we can send notifications to a user, we can really drive the engagement up by keeping the user notified and engaged with the app like we do in native apps.</p><h4>Cheaper and Improved User Acquisition</h4><p>The open nature and discoverability of the web compared to app stores translates into a more democratic and organic way of finding content, and this translates to both user reach, user experience friction, and user acquisition costs.</p><h4>Better Performance, Conversion and Engagement</h4><p>PWAs provide experiences that are consistently fast. From the moment a user downloads an app to the moment they start interacting with it, everything happens really fast. Because they leverage cache, repeated uses of the app don’t have to hit the network resulting in an even faster experience.</p><p><strong>Learn more about </strong><a href="https://ionicthemes.com/tutorials/about/the-complete-guide-to-progressive-web-apps-with-ionic4#main-benefits-of-using-pwas"><strong>the benefits of using PWAs</strong></a><strong> and also see some examples of big brands using progressive web apps and their results in </strong><a href="https://ionicthemes.com/tutorials/about/the-complete-guide-to-progressive-web-apps-with-ionic4#main-benefits-of-using-pwas">https://ionicthemes.com/tutorials/about/the-complete-guide-to-progressive-web-apps-with-ionic4#main-benefits-of-using-pwas</a></p><blockquote><em>The combination of cheaper </em><strong><em>user acquisition costs</em></strong><em>, improved conversions and engagement metrics is a no-brainer. Even more if the user experience is guaranteed to be on par with native apps.</em></blockquote><p>If you want to start creating your Ionic Framework app but don’t know how to start, I suggest your to try <a href="https://ionicthemes.com/product/ionic4-full-starter-app">Ionic 5 Full Starter App</a>. It’s an ionic 5 app that you can use to jump start your Ionic app development and <strong>save yourself hundreds of hours of design and development.</strong></p><p>It includes more than 100 carefully designed views and components. It has full support for PWA with Angular. <a href="https://ionic-4-full-starter-app-docs.ionicthemes.com/v/master/progressive-web-app#how-to-install-this-template-as-a-pwa-on-your-phone"><strong>Try it on your phone as a PWA to see the magic!</strong></a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Tw-cr7UZVNszg6OzLTSmeA.jpeg" /><figcaption>ionic 5 starter app</figcaption></figure><h3>Embracing Progressive Web Apps with Ionic</h3><p>Enough talking about the business side, let’s dive in and see how Ionic Framework is the ideal tech to build our Progressive Web App.</p><p>As we mentioned above, for a web app to be considered a PWA, it needs to comply with the following principles. Let’s see how Ionic Framework addresses each of them.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/643/0*a4fxgFX5GP1Fhr7z" /></figure><h3>Get your PWA up and running with Ionic Framework</h3><p>When it comes to the implementation, the new Ionic 4 presents two ways of building apps.</p><p>In an effort to attract new developers and become framework agnostic while embracing web components standard, Ionic 4 can be used out of the box without any companion framework. The <a href="https://www.npmjs.com/package/@ionic/core">@ionic/core</a> package contains the Web Components that make up the reusable UI building blocks of Ionic Framework. These components are designed to be used in traditional frontend view libraries/frameworks (such as Stencil, React, Angular, or Vue), or on their own through traditional JavaScript in the browser.</p><p>On the other hand, honoring the well known Angular relationship with Ionic from the early days of the framework, Ionic has an option to enhance the development experience and use Ionic in combination with the Angular capabilities you already know and love. The <a href="https://www.npmjs.com/package/@ionic/angular">@ionic/angular</a> package comes with Angular specific building blocks on top of <a href="https://www.npmjs.com/package/@ionic/core">@ionic/core</a> components.</p><p>When it comes to building a Progressive Web App with Ionic, we can choose either way, but we have to take into consideration some details as we will need extra help to handle some details of the implementation (<a href="https://developers.google.com/web/fundamentals/primers/service-workers/">service workers</a> and <a href="https://developers.google.com/web/fundamentals/web-app-manifest/">web manifest</a>).</p><p>The new features in modern browsers that allow PWAs to work are <strong>web manifest</strong> files and <strong>service workers</strong>.</p><p>The <strong>web manifest</strong> is a simple JSON file that defines the fundamental parameters of the PWA, icons, app name, colors, screen orientation, etc.</p><p><strong>Service workers</strong>, are the real key to the enhanced experiences that a PWA can offer. Acting essentially as a proxy between the user and the network, they are little javascript helpers that do the cool things that allow PWAs to work, such as caching data (and deciding when and how to use the cached info — for example to overcome a bad network connection), event triggers, taking care of push notifications, organizing updates and so on.</p><h3>Framework agnostic PWA</h3><p>Ionic has a <a href="https://ionicframework.com/pwa/toolkit">PWA Toolkit</a> that has everything you need to build progressive web apps without the dependency on a frontend framework such as Angular, React or Vue.</p><p>However under the hood it uses <a href="https://ionicthemes.com/tutorials/about/ionic-framework-development-glossary#stencil">Stencil</a> for compiling and building the app, <a href="https://developers.google.com/web/tools/workbox/">Workbox</a> to enforce best practices and easing the boilerplate needed when working with service workers and cache strategies (both crucial to build PWA’s), and Ionic Core for routing and all the reusable UI components Ionic is known for.</p><p>To be honest I haven’t looked in detail this approach. Although it has a solid foundation and looks promising, with new libraries or frameworks I tend to wait a little bit until they get more mature and stable. Besides that, I really like building Angular apps, so I might be a little bit biased.</p><h3>Enhancing your PWA with Angular</h3><p>If we choose this path, besides Ionic and Angular (@ionic/angular package) we will also need the @angular/pwa package to setup and ease the configuration of the service worker and web manifest in our project.</p><p>For more information, follow this link on <a href="https://angular.io/guide/service-worker-getting-started">adding service workers to your Angular app</a>.</p><p>I have to admit that I feel more comfortable with this approach as Angular provides a solid, future proof framework to build apps. On top of that, adding Ionic with all the cool features it comes ends up in a winner combination.</p><p><strong>In conclusion, the framework agnostic approach using the Ionic PWA Toolkit (that comes with Stencil, Workbox and Ionic Core) is really just a starting point for building an app. While following the Angular enhancement approach (which includes the </strong><strong>@angular/pwa package) is ideal to add PWA features to an already existing </strong><strong>@ionic/angular app.</strong></p><p><strong>Note</strong>: It’s worth mentioning that you can’t combine the PWA Toolkit with the @ionic/angular package. They use a different set of underlying libraries and are not intended to be used together. You either go with the @ionic/angular + @angular/pwa approach or with the PWA Toolkit (@ionic/core + Stencil + Workbox) approach.</p><h3>Ionic is a great choice to build a PWA</h3><p>Embracing the flexibility Ionic provides, either way will get you cover to build a progressive web app.</p><p>As I mentioned above, most of the principles that constitute a PWA are already baked into Ionic (<strong>Responsive</strong>, <strong>App-like</strong>, <strong>Discoverable</strong>, <strong>Linkable</strong>).</p><p>The others (<strong>Connectivity independent</strong>, <strong>Fresh</strong>, <strong>Re-engageable</strong>, <strong>Installable</strong>) relate to service workers and web manifest specification. These are handled both by Workbox or @angular/pwa.</p><p>The <strong>Progressive</strong> principle is intrinsic and refers to the ability to adapt to the features list available in the platform the app is running. For example if you run a PWA in Chrome on iOS, service workers are not available but that doesn’t prevent the PWA from working.</p><p>The remaining <strong>Safe</strong> PWA principle rely on your hosting provider respectively.</p><p>Today most browsers do support service workers and the use of HTTPS is well spread.</p><p>Probably, the not so well known, and thus more difficult to grasp, are the principles related to service workers and web manifest. Luckily both Workbox and @angular/pwa packages can ease the process of implementing and configuring some of their most hidden details. If you want to learn more about this, follow this awesome guide on <a href="https://angular.io/guide/service-worker-config">service workers configuration</a> using the @angular/pwa package.</p><h4>Things that need to be polished</h4><p>Although Ionic has all the PWA principles covered, if you want to go the extra mile regarding user experience and perceived performance you may find some blocks on the road.</p><p>There are two issues that I stumbled upon when playing around with @ionic/angular.</p><p>One of the issues is regarding <strong>server side rendering</strong> using Angular Universal in an @ionic/angular app.</p><p>And the other issue is about having <strong>lazy loadable routes</strong> working with the &lt;ion-router-outlet&gt; which at its core uses the Angular &lt;router-outlet&gt;. This issue only happens when you try to lazy load modules under named outlets (for example if you have an app with tabs navigation).</p><p>Both issues (<a href="https://github.com/ionic-team/ionic/issues/15041">server side rendering issue</a>, <a href="https://github.com/ionic-team/ionic/issues/14566#issuecomment-394342966">lazy loading issue</a>) are being handled by the Ionic team and hopefully they get fixed while Ionic 4 becomes more stable towards the release candidate.</p><h3>Let’s build a Progressive Web App with Ionic</h3><p>For this example app I will focus on showing you how easy is to go from 0 to 100 in terms of Progressive Web App principles checklist using Ionic Framework.</p><p>After we achieve that we will be adding more complex functionalities like <strong>push notifications</strong> and finally adjusting a little bit the styles to make the ionic app look great.</p><blockquote><strong>Go to the </strong><a href="https://ionicthemes.com/tutorials/about/the-complete-guide-to-progressive-web-apps-with-ionic4#building-a-progressive-web-app-with-ionic4"><strong>original article </strong></a><strong>to see all the steps to build a complete PWA with Ionic 4 and Angular. You can also download for free all the source code that we will use to build our PWA.</strong></blockquote><p><a href="https://ionicthemes.com/tutorials/about/the-complete-guide-to-progressive-web-apps-with-ionic4#building-a-progressive-web-app-with-ionic4">https://ionicthemes.com/tutorials/about/the-complete-guide-to-progressive-web-apps-with-ionic4#building-a-progressive-web-app-with-ionic4</a></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttps%2Fwww.youtube.com%2Fembed%2FTvJtCrErenM%3Ffeature%3Doembed&amp;url=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttp%2Fwww.youtube.com%2Fwatch%3Fv%3DTvJtCrErenM&amp;image=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttps%2Fi.ytimg.com%2Fvi%2FTvJtCrErenM%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="640" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/2d65a8a961face1419a3c9fa9c75235a/href">https://medium.com/media/2d65a8a961face1419a3c9fa9c75235a/href</a></iframe><p>As I mentioned before, we do believe PWAs are the future (or should I say the present?). Stay tuned as I will be updating this post as new features become available and more Ionic tutorials so <a href="http://eepurl.com/dv-XIP">subscribe to our newsletter</a> to keep learning Ionic Framework!</p><p><em>Originally published at </em><a href="https://ionicthemes.com/tutorials/about/the-complete-guide-to-progressive-web-apps-with-ionic4"><em>ionicthemes.com</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8f96c869bc2c" width="1" height="1" alt=""><hr><p><a href="https://medium.com/learn-ionic-framework/want-to-build-progressive-web-app-with-ionic-v4-8f96c869bc2c">Building a PWA with Ionic and Angular — step by step</a> was originally published in <a href="https://medium.com/learn-ionic-framework">Learn Ionic Framework</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>