Last updated

/iblai-vibe-ops-release β€” Build & Submit to the App Stores

Mirrored from iblai/vibe Β· skills/ship/iblai-vibe-ops-release/SKILL.md. This page is generated β€” edit it in the repository, not here.

Generate a Makefile and a fastlane/ config so a single command builds your Tauri app and submits it to the Apple App Store (App Store Connect / TestFlight) and Google Play. Fastlane handles app-record / bundle-id creation and the upload; Tauri (from /iblai-vibe-ops-build) still produces the .ipa / .aab.

make ios-release        # build .ipa  -> upload to TestFlight
make android-release    # build .aab  -> upload to Play internal track
make release-all        # both

Prerequisites

  1. Tauri shell already added and the mobile projects initialized β€” /iblai-vibe-ops-build (pnpm exec tauri ios init, pnpm exec tauri android init). This skill assumes src-tauri/gen/apple and src-tauri/gen/android exist.
  2. Fastlane installed: brew install fastlane (macOS) or gem install fastlane. Verify with fastlane --version.
  3. Store accounts: an Apple Developer Program membership ($99/yr) and a Google Play Developer account (one-time $25).
  4. Credentials obtained and placed as described in references/credentials.md β€” the App Store Connect API key (.p8) and the Google Play service-account JSON.

Two honest constraints (read before promising full automation)

These are platform limits, not skill limits β€” the Makefile is built around them:

  • Google Play cannot create the app or accept the first upload via the API. You must create the app listing once in the Play Console and push the first .aab there by hand. After that, make android-submit (Fastlane supply) updates it on every release. make android-create only validates that your service account has access.
  • Apple app creation may require Apple-ID (session) auth. Uploading a build works with the API key alone, but produce (creating the App Store Connect record + bundle id) sometimes needs an Apple-ID login with an app-specific password / 2FA. make ios-create tries the API key first; if Apple refuses, set FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD (see the credentials reference) or create the app once in App Store Connect.

What this skill installs

Copy these into the project root (they are ready-to-use, values come from env β€” no templating):

FilePurpose
assets/MakefileThe build/submit targets (below)
assets/fastlane/FastfileFastlane lanes for both platforms
assets/fastlane/AppfileMaps env vars β†’ app identifiers
assets/fastlane/.env.exampleCredential template β€” copy to fastlane/.env and fill in

Install steps

# from the project root
cp <skill>/assets/Makefile ./Makefile
mkdir -p fastlane
cp <skill>/assets/fastlane/Fastfile   fastlane/Fastfile
cp <skill>/assets/fastlane/Appfile    fastlane/Appfile
cp <skill>/assets/fastlane/.env.example fastlane/.env      # then fill it in

Then gitignore the secrets (append if missing):

fastlane/.env
fastlane/*.p8
fastlane/*.json
fastlane/report.xml

Fill in fastlane/.env with the values from references/credentials.md, drop the .p8 and the Play service-account .json into fastlane/, then run make doctor.

Makefile targets

TargetWhat it does
make helpList all targets
make doctorCheck tools (fastlane, tauri, cargo) + that fastlane/.env and creds exist
make bump VERSION=1.2.3Rewrite version in src-tauri/tauri.conf.json
iOS
make ios-createFastlane produce β€” create the App Store Connect app record + bundle id
make ios-buildtauri ios build --export-method app-store-connect (signed store .ipa)
make ios-submitFastlane pilot β€” upload the newest .ipa to TestFlight
make ios-releaseios-build then ios-submit
Android
make android-createValidate the Play service-account access (see constraint above)
make android-buildtauri android build --aab (release App Bundle)
make android-submitFastlane supply β€” upload the newest .aab to the internal track
make android-releaseandroid-build then android-submit
Both
make release-allios-release + android-release

The submit lanes locate the freshest artifact automatically (src-tauri/gen/apple/**/*.ipa, src-tauri/gen/android/**/*.aab); override with IPA_PATH= / AAB_PATH= if needed.

Signing prerequisites (do once)

  • iOS β€” make ios-build uses App-Store-Connect-API-key managed signing (the same ASC_* vars). If Xcode-managed signing is set up instead, open src-tauri/gen/apple/*.xcodeproj β†’ Signing & Capabilities and set your Team.
  • Android β€” a release .aab must be signed with a release keystore. Generate one and point Tauri at it:
    keytool -genkey -v -keystore ~/release.jks -keyalg RSA -keysize 2048 \
      -validity 10000 -alias upload
    Create src-tauri/gen/android/keystore.properties:
    storeFile=/absolute/path/to/release.jks
    storePassword=...
    keyAlias=upload
    keyPassword=...
    (gitignore keystore.properties and the .jks.) For Play App Signing, this is your upload key β€” Google re-signs with the app key it manages.

Typical first run

make doctor            # confirm tooling + creds
make ios-create        # create the ASC app + bundle id
make ios-release       # build + upload to TestFlight

# Android β€” create the app + do the FIRST upload in Play Console by hand, then:
make android-release   # every subsequent release

Promoting a build

make *-submit uploads to TestFlight (iOS) and the internal track (Android, as a draft). Promoting to public App Store review / production is left to the consoles (or extend the Fastfile with deliver / supply track_promote_to). This keeps releases deliberate β€” see references/credentials.md for the extension notes.

Reference

Copyright Β© ibl.ai | support@iblai.zendesk.com