Flutter makes the build easy, but sharing an iOS build still follows Apple's rules: the .ipa has to be signed for each tester's iPhone.
1. Build the .ipa
Building an iOS app still needs macOS, on your Mac or in CI. From your project folder:
flutter build ipa --export-method ad-hoc
The .ipa is written to build/ios/ipa/. Set your team and bundle ID in Xcode first, under Runner, Signing & Capabilities.
If you build in CI, such as GitHub Actions or Codemagic, send the build straight to testers with one more command. It finds the .ipa in build/ios/ipa/ by itself:
flutter build ipa --export-method ad-hoc npx buildferry upload
Set BUILDFERRY_TOKEN to a token from Upload from CI in the dashboard. On GitHub Actions you can use the BuildFerry action instead.
2. Share it
- TestFlight: upload with Xcode or Transporter and wait for processing and, for external testers, App Review.
- A hosting link: works only for iPhones already in your provisioning profile.
- BuildFerry: upload the .ipa and send one share link. Each tester's iPhone is registered after you approve it, and the build is re-signed for it in the cloud.
With BuildFerry, a new tester doesn't mean a new flutter build. Only a code change does.
3. Your tester installs
They open the link in Safari, allow a one-time profile, and tap Install once you approve.
Flutter tips
- Release mode only.
flutter build ipabuilds in release mode. Debug builds only run when started from your Mac. - Bump the build number with
--build-numberso testers can tell builds apart. - Extensions and push keep working: BuildFerry signs app extensions with their own bundle IDs and profiles.
Questions
How do I share a Flutter app on iPhone without the App Store?
Build it with flutter build ipa, then use ad hoc distribution. BuildFerry registers each tester's iPhone and re-signs the .ipa, so they install from a link in Safari.
Can I build a Flutter iOS app on Windows?
Not locally. Building for iOS needs macOS and Xcode. Use a Mac or a macOS CI service, then upload the .ipa from any computer.