Every Codemagic build on your testers' phones, with no publishing script
Pro and Team
Codemagic builds your app and keeps the artifacts, but its download links in emails and dashboards last 24 hours, and testers get a file instead of an install page. A publishing script that uploads to AppForShare fixes that, if you use codemagic.yaml. Connect Codemagic needs no script at all, so it also works with the Workflow Editor.
You keep building on Codemagic exactly as before. AppForShare reads your finished builds with a Codemagic API token and shares them: a link that always opens the newest build, passwords, iPhone onboarding, feedback, the readiness check and the store steps.
Example
Connect Codemagic, Notes app
- ios-adhoc, build 61Shared to Beta, ready
- android-beta, build 61Shared to Beta, ready
- TokenStored encrypted, never shown again
- Last checked3 minutes ago
Made for
- Flutter teams on the Codemagic Workflow Editor who never touch YAML
- Teams with several Codemagic workflows who would rather not add a script to each one
- Agencies that share Codemagic builds with clients
What it ends
- Testers opening a Codemagic link from last week that has stopped working
- Adding and maintaining an upload script in every workflow
- iPhone testers getting an .ipa file to download instead of an Install button
How it works
Step 1
Paste the token once
On a project's Testing page, an Owner or Admin pastes a Codemagic API token for the whole workspace. AppForShare checks it with Codemagic, stores it encrypted and never shows it again.
Step 2
Map a workflow
Pick the Codemagic app and workflow that go to this project, and optionally a channel such as Beta.
Step 3
Build on Codemagic
AppForShare checks the mapped workflows every 5 minutes. A finished build lands in the project with its install link, release notes and readiness result.
What it imports
One file per build and platform: the .ipa, and for Android the .apk, or the .aab when the build has no .apk. Each Codemagic build is imported once, within your plan's file size limit. Release notes come from the build's release notes, else from the commit message with the build number, workflow, branch and commit, and the build links back to its Codemagic build page.
Builds that finished before you mapped the workflow are not imported. An App Store signed .ipa lands as a store build, ready for an Admin to send to TestFlight.
Read only, and the token stays sealed
Codemagic documents no outgoing build webhooks, so AppForShare reads its Builds API every 5 minutes. It never starts, cancels or changes anything in Codemagic. The token is sealed like store keys, with its own data key wrapped by Google Cloud KMS. Disconnecting deletes it.
The token acts with your Codemagic role, as Codemagic's own docs say. Use a token of a person whose role fits what you want AppForShare to read.
Rather keep it in your workflow?
A publishing script works too. With CLI 1.20.0 or later, npx --yes appforshare@latest upload --if-success --channel beta skips failed builds, picks the newest build file and writes the release notes from the last commit. The steps are in the Codemagic guide.
Good to know
- It does not build your app or run on Codemagic's machines. Codemagic builds; AppForShare shares the result.
- Builds arrive within about 5 minutes of finishing, not at once, since Codemagic sends no build webhook.
- iPhones still need to be in the ad hoc profile. Register them with the onboarding link, then run the workflow again so the new profile is inside the build.
- Your plan's file size limit applies.
Questions
- Do I need to change codemagic.yaml?
- No. Nothing goes in the workflow, so it works with codemagic.yaml and with the Workflow Editor.
- Can AppForShare start or cancel my Codemagic builds?
- No. It only reads finished builds and downloads their files.
- Where is the token kept?
- Encrypted with its own key, wrapped by Google Cloud KMS, and never shown again. Disconnect deletes it.
- Can I do it from the CLI?
- Yes: appforshare codemagic connect --token-stdin --app <codemagic app id> --workflow <id> --project <id> --channel Beta, then codemagic status, and codemagic disconnect --yes to remove it.
- Which plan do I need?
- Pro or Team.
Read next
Try it on your own app
Free account in a minute. Pro starts with a 7 day free trial.
More features
- Builds on GitHub Actions
- Flutter builds on GitHub Actions
- Flutter facts and checks
- Connect Expo (EAS builds)
- Send store builds to TestFlight and Google Play
- TestFlight groups and beta review on send
- TestFlight feedback in your inbox
- iOS device registration
- Hands free device setup
- Store listing editor
- App Store submission
- Google Play releases
- TestFlight tester sync
- Tester app with notifications
- Tester groups and status
- Join links for testers
- Beta and Live channels
- Build history page
- Tasks and activity feed
- Feedback to Linear and Jira
- Release checklist, approvals and blockers
- Release page per version
- Install link controls
- Several links per build
- Retire a test build
- TestFlight and APK in one link
- Install page in 13 languages
- In-app update check
- .aab uploads
- MCP server for AI tools
- Tester feedback with screenshots
- In-app feedback link
- AI test plan for each build
- Diawi compatible upload API
- Remember my iPhone
- Install help and why it failed
- Email the install link
- Custom channel address
- Verified publisher
- Daily install email
- Zipped .app upload