Ship the iOS version of your Flutter app, from Windows
Keep writing Dart on your PC. When it’s time for iOS, open a real Mac mini and let Xcode do the Apple part.
Where the Mac fits in a Flutter project
Flutter lets you write one Dart codebase for Android and iOS, and most of the work happens in your editor on Windows. The iOS build goes through Xcode, which runs on macOS: compiling the iOS app, running it in the Simulator, signing it and uploading it to App Store Connect.
A rented Mac mini M6 covers exactly that part. You keep developing on your PC, push to Git, and open the Mac when you want to see the iOS version or ship it. Everything else in your workflow, from Android Studio to your Android release pipeline, stays as it is.
Setting up Flutter on the Mac
After your first login, install Xcode from the App Store with your own Apple Account, then open it once to accept the licence and let it install its components. Install Flutter by cloning the stable branch with Git or with a version manager such as FVM, and add CocoaPods with brew install cocoapods.
Run flutter doctor to confirm that Xcode, CocoaPods and the iOS toolchain are ready. Clone your repository, run flutter pub get, and the project is ready to build. If you keep the Mac for a week or a month, all of this stays installed, so later sessions start with a git pull.
Run it in the iOS Simulator
Open the Simulator with open -a Simulator, then run flutter run from your project folder. Flutter builds the iOS app, installs it and attaches the debugger, and hot reload works just as it does on Android: save a Dart file and the change appears a moment later.
This is the time to check the iOS details. Permissions need usage descriptions in ios/Runner/Info.plist before the system dialog appears. Cupertino widgets, safe areas, the back-swipe gesture and plugin behaviour on iOS all deserve a look. Fix them on Windows or directly on the Mac, then reload.
Signing and version numbers
Open ios/Runner.xcworkspace in Xcode. In the Runner target’s Signing & Capabilities tab, pick your Apple Developer team and set a unique bundle identifier, such as com.yourcompany.app. Leave automatic signing on and Xcode creates the certificate and provisioning profile.
Flutter reads the version from pubspec.yaml: in version: 1.2.0+5, the part before the plus is the version users see and the number after it is the build number, which goes up with every upload. Set your app icon in the asset catalog, then run flutter build ipa, which produces an Xcode archive and an IPA file under build/ios.
Uploading to App Store Connect
Open the archive from build/ios/archive in Xcode’s Organizer, validate it and choose Distribute App to upload it to App Store Connect. You can also drag the IPA into Transporter, Apple’s free upload app. After a short processing time the build appears in TestFlight.
Install TestFlight on your iPhone to try the release build on a real device, and invite testers if you want feedback. When you are happy, fill in the App Store listing, attach the build and submit it for review. The review happens on Apple’s side, so the Mac’s job for this version is done.
Which plan fits a Flutter release
For a first submission or an occasional update, the 24-hour pass at $19 is built for it and includes our step-by-step guide. Prepare your Apple Developer account, icon, screenshots and privacy policy URL before you start, and the day goes to building and uploading.
If you are polishing the iOS version over several days, the 7-day pass costs $49. Teams shipping iOS updates every week usually keep the monthly plan at $112, with Flutter, CocoaPods and caches always ready. FlutterFlow projects work the same way: download the code or push it to GitHub, then follow the same steps on the Mac.