Goal
Connect a repository, store signing credentials once, and get signed builds that land straight in your release channels.Prerequisites
- A GitHub repository connected through the StackShift GitHub app
- mobile_build is enabled on the plan
Workflow
1
Create a build profile on the Builds tab: repository, branch, framework (Flutter, React Native, Expo, or native Android), and output (AAB, APK, or IPA).
2
Upload your Android signing keystore once; it is encrypted and only ever mounted into the build container as a secret.
3
Choose an automatic trigger: every push to the branch, or tags matching a pattern like v* (recommended).
4
Watch build logs live; successful builds are scanned, signed, and land in the internal channel as a release.
Build profiles
An app can have several named profiles (the default is production), so one app can build Android and iOS, or a staging variant with different environment variables. Pipelines pick a profile by name.Where builds run
- Android builds run in an isolated Linux build container with cached Gradle, npm, and pub dependencies per app.
- iOS builds run on hosted macOS infrastructure and deliver signed IPAs the same way.
- Release builds that produce an R8/proguard mapping file upload it automatically so Observe can symbolicate crashes from that version.
Triggering from CI
Create a CI token with the build:trigger scope and POST to /api/v1/public/mobile/ci/build to start a build from any external system. CI tokens also cover release ingestion, promotion, store submissions, over-the-air publishing, and pipeline dispatch.Expected result
Pushing a tag produces a signed, scanned release with version metadata extracted from the binary — no local build machine involved.