11. Automation With Appflow (a.k.a. Saving Your Sanity)
You've done the painful first manual builds, created certificates, and fought CocoaPods into submission. Now comes the good news: you don't have to keep doing that every time.
Enter Ionic Appflow - the CI/CD platform that takes your Git pushes, builds your app in the cloud, and ships it straight to Apple and Google.
This is where you save hours (and your sanity).
Step 1: Why Appflow?
Without automation, every app update looks like this:
Build locally in Xcode/Android Studio.
Increment version numbers.
Generate signed binaries.
Upload manually to App Store Connect or Play Console.
Do that every week and you'll lose entire days. With Appflow:
Push to Git.
Appflow builds, signs, versions, and uploads.
You just hit "Submit for Review."
Step 2: Preparing iOS
Appflow needs credentials to sign your builds and talk to Apple.
Export your Apple Distribution Certificate (
.p12).Grab your App Store Connect App-Specific Password → 👉 https://account.apple.com/account/manage
Upload your
.p12to Appflow's Signing Certificates.Add a Store Destination in Appflow with your Apple ID + App-Specific Password.
That's it. Now Appflow can impersonate you to push builds directly to TestFlight/App Store Connect.
Step 3: Preparing Android
This is where your keystore (.jks file) comes in.
You created it earlier in Android Studio (
Build > Generate Signed App Bundle).You set an alias and password.
⚠️ Remember these. Write them down in a password manager. If you lose them, you'll never update your app again. Ever.
Now in Appflow:
Go to Signing Certificates > Add Android Certificate.
Upload your
.jksfile.Enter the alias + password.
Appflow can now sign every future Android build for you.
Step 4: Auto-Versioning
Remember those CI build numbers we set up? Appflow injects CI_BUILD_NUMBER into your environment, so versioning stays automatic.
iOS →
Info.plist:Bundle version string (short) -> 1.1.$(CI_BUILD_NUMBER) Bundle version -> $(CI_BUILD_NUMBER)Android →
build.gradle:gradle def sysBuildNumber = System.getenv("CI_BUILD_NUMBER") versionCode Integer.valueOf(sysBuildNumber) versionName "1.0." + sysBuildNumber
This way every build increments properly, no rejections for duplicate versions.
Step 5: Google Service Account (Deployments)
To let Appflow upload builds to Google Play for you, you need a Google Cloud Service Account.
Go to 👉 https://console.cloud.google.com/iam-admin/serviceaccounts.
Create a new service account.
Assign role: Service Account User.
Generate a key → export as JSON.
Upload JSON to Appflow's Store Destinations for Google.
Now Appflow has the keys to push your .aab directly into your Play Console.
Just a side note here; please remember to enable the Play Console API in your Google Cloud project. It's not enabled by default.
Also remember to add your service account email to your Google Play Console account (otherwise it will complain about permissions).
Step 6: Automations
With iOS and Android set up, head into Appflow → Automate.
Here you can:
Trigger builds on Git pushes.
Auto-build for iOS + Android.
Send straight to stores.
Or just store the binaries for manual upload.
I recommend:
Production branch → App Store or Play Store builds.
Staging branch → TestFlight or Internal Testing builds.
Step 7: First-Time Manual Uploads (Still Required)
Automation doesn't work until each store has seen your app once.
Upload your first iOS
.ipamanually via Transporter or App Store Connect.Upload your first Android
.aabmanually in Play Console.
After that, Appflow takes over.
Survival Tips
Back up certs + keystore in multiple places. Cloud + offline.
Use branches wisely → don't push junk to your production branch.
Expect first-time errors → the pipeline won't run clean until you've done a manual build.
Appflow config → use
appflow.config.jsonto fix dependency installs (--legacy-peer-depsis a lifesaver).
Rant Break
Apple made you buy a Mac, jump through provisioning profile hell, and learn Ruby just to get here. Google at least pretends to like you.
Appflow is the one bit of light in the tunnel: the automation that makes all this pain tolerable.
Coming Up Next
With automation in place, you're ready for the next boss fight: The App Review Hunger Games.
Because even after all this, you're not "live" until Apple or Google reviewers give you the nod. And with Apple especially, that usually means arguing. Constantly. Endlessly. Until they finally cave.
But first, let us take a break and look at generating app icons.


