Build dan rilis aplikasi iOS Flutter tanpa Mac
Flutter berjalan baik di Windows dan Linux, sampai Anda butuh iOS. Di PC, Flutter bahkan tidak menyediakan perintah build iOS. Anda butuh macOS untuk langkah itu, entah di Mac sewaan atau di runner CI. Kami menjalankan seluruh alurnya pada 19 Oktober 2026, dengan Flutter 3.47.7 dan Xcode 26.6.
Yang berfungsi di Windows dan Linux
Kode Dart, widget test dan build Android Anda semuanya jalan di PC. Dalam test kami, aplikasi baru lulus flutter test di runner Windows Server 2025 dan Ubuntu 24.04 milik GitHub. Job Ubuntu juga berhasil build APK Android debug. Hot reload di emulator Android juga bekerja dengan cara yang sama.
Lalu kami meminta build iOS di kedua mesin itu. Flutter menyembunyikan perintah iOS di sistem apa pun yang bukan macOS. Kedua runner mencetak baris yang sama:
Could not find a subcommand named "ios" for "flutter build".
Daftar target build-nya berisi apk, appbundle, web dan target desktop dari host. Tidak ada ios dan tidak ada ipa.
Yang butuh macOS
- flutter build ios dan flutter build ipa. Panduan rilis Flutter bilang Xcode wajib, dan Anda harus memakai perangkat dengan macOS.
- Paket native. Sejak Flutter 3.44, plugin masuk lewat Swift Package Manager. Flutter kembali ke CocoaPods untuk plugin yang belum mendukungnya. Keduanya berjalan di dalam build Xcode.
- iOS Simulator. Simulator ikut terpasang bersama Xcode, jadi hanya jalan di Mac. Lihat iOS Simulator di Windows untuk pilihan yang ada.
- Signing dan upload. Sertifikat dan profil dibuat dan dipakai di Mac.
Siapkan Flutter di Mac sewaan
Mac MacRun sudah berisi Xcode 27.1 dan simulator iOS 27.1. Xcode 26.6 juga terpasang. Flutter belum terpasang, jadi Anda menambahkannya sendiri. Anda punya hak admin dan Homebrew. Satu perintah ini berhasil dalam test kami dan memasang Flutter 3.47.7 dalam waktu kurang dari satu menit:
brew install --cask flutter flutter --version
Dokumentasi Flutter sendiri memakai unduhan. Anda mengekstrak bundle macOS ke folder seperti ~/develop, lalu menambahkan baris ini ke ~/.zprofile:
export PATH="$HOME/develop/flutter/bin:$PATH"
Berikutnya setup Xcode dari halaman iOS Flutter. Langkah ini memilih Xcode, menjalankan tugas peluncuran pertama, dan menampilkan lisensi. Lalu ia memeriksa platform iOS dan runtime simulator:
sudo sh -c 'xcode-select -s /Applications/Xcode-27.1.app/Contents/Developer && xcodebuild -runFirstLaunch' sudo xcodebuild -license xcodebuild -downloadPlatform iOS flutter doctor -v
Di Mac MacRun, Xcode 27.1 ada di /Applications/Xcode-27.1.app dan sudah terpilih. Xcode 26.6 ada di /Applications/Xcode.app. Di Mac lain, pakai path yang dicetak oleh ls -d /Applications/Xcode*.app. Di runner kami, flutter doctor memberi Xcode tanda centang hijau dan menemukan CocoaPods 1.17.0. Ia menandai lisensi Android, yang tidak penting untuk iOS.
Build dan jalankan di Simulator
Clone repo Anda, jalankan flutter pub get, lalu build untuk Simulator. Dalam test kami aplikasinya punya satu plugin, shared_preferences. Tidak ada folder Pods yang muncul, jadi Flutter memakai Swift Package Manager.
flutter build ios --simulator xcrun simctl list devices available xcrun simctl boot "iPhone Duo" xcrun simctl install booted build/ios/iphonesimulator/Runner.app xcrun simctl launch booted com.example.demo
Pakai nama perangkat dari daftar itu dan bundle ID Anda sendiri. Di MacRun, runtime iOS 27.1 membawa perangkat iPhone Duo. Lewat berbagi layar Anda juga bisa memakai flutter run dengan simulator yang sudah menyala untuk hot reload. Dari Windows, ikuti Xcode dari Windows untuk melihat layar Mac.
Workflow yang kami jalankan di GitHub Actions
Ini job macOS dari test kami. Job ini membuat aplikasi, menambahkan plugin, dan build untuk Simulator. Lalu ia memasang dan membuka aplikasinya, kemudian build dan archive versi rilis tanpa signing.
name: flutter-guide
on: workflow_dispatch
jobs:
macos:
runs-on: macos-26
steps:
- uses: subosito/flutter-action@v2
with:
channel: stable
cache: true
- run: xcodebuild -version && sw_vers
- run: flutter doctor -v
- run: flutter create demo
- run: flutter pub add shared_preferences
working-directory: demo
- name: Simulator build
run: time flutter build ios --simulator
working-directory: demo
- name: Install and launch in the Simulator
run: |
xcrun simctl list devices available | grep -i iphone | head -5
UDID=$(xcrun simctl list devices available -j | python3 -c "import json,sys; d=json.load(sys.stdin)['devices']; print(next(x['udid'] for k,v in d.items() if 'iOS' in k for x in v if x['name'].startswith('iPhone')))")
echo "UDID=$UDID"
xcrun simctl boot "$UDID"
xcrun simctl bootstatus "$UDID"
xcrun simctl install booted build/ios/iphonesimulator/Runner.app
xcrun simctl launch booted com.example.demo
sleep 10
xcrun simctl io booted screenshot shot.png
ls -la shot.png
working-directory: demo
- name: Release build, no signing
run: time flutter build ios --release --no-codesign
working-directory: demo
- name: Archive, no signing
run: time flutter build ipa --no-codesign
working-directory: demoSeluruh job memakan waktu 5 menit 39 detik. Baris berikut diambil dari log-nya:
[✓] Xcode - develop for iOS and macOS (Xcode 26.6) [5.9s] ✓ Built build/ios/iphonesimulator/Runner.app com.example.demo: 14546 ✓ Built build/ios/iphoneos/Runner.app (14.6MB) ✓ Built build/ios/archive/Runner.xcarchive (170.4MB) Codesigning disabled with --no-codesign, skipping IPA.
Build Simulator memakan waktu 48 detik. Build rilis memakan waktu 1 menit 14 detik, dan archive 45 detik. Baris terakhir itu penting. Tanpa signing, Flutter berhenti di archive. File .ipa yang sungguhan butuh tim Apple Anda.
Kirim ke TestFlight
Anda butuh Apple Developer Program, yang biayanya 99 USD per tahun. Buat aplikasinya di App Store Connect dari browser apa pun. Di Mac, buka ios/Runner.xcworkspace di Xcode sekali. Pilih tim Anda di Signing and Capabilities. Lalu build file .ipa:
flutter build ipa --build-name 1.0.0 --build-number 2
Flutter menulis archive ke build/ios/archive dan .ipa ke build/ios/ipa. Unggah dengan Transporter, atau dengan baris ini dari dokumentasi Flutter dan API key App Store Connect:
xcrun altool --upload-app --type ios -f build/ios/ipa/*.ipa \ --apiKey your_api_key --apiIssuer your_issuer_id
Kami tidak bisa menjalankan langkah yang butuh signing di CI, karena test kami tidak punya akun Apple. Langkah itu diambil dari panduan rilis Flutter. Untuk test di iPhone Anda sendiri, pasang build dari TestFlight. Mac remote tidak bisa melihat ponsel yang dicolokkan ke PC Anda. Panduan publish kami membahas API key dan review.
Siapa yang sebaiknya tidak menyewa Mac untuk ini
Jika Anda hanya butuh .ipa, build di cloud mungkin cukup. Panduan rilis Flutter punya bagian tentang Codemagic. Akun pribadi Codemagic mendapat 500 menit build macOS gratis per bulan. Runner macOS GitHub Actions menjalankan workflow di atas, ditagih per menit. Jika Anda merilis setiap minggu selama bertahun-tahun, Mac mini bekas bisa lebih murah dalam jangka panjang.
Mac sewaan cocok saat Anda perlu melihat aplikasinya. Artinya Simulator, layar signing di Xcode, atau crash di debugger. Pass harian MacRun seharga $15 untuk Mac mini M6 khusus, dan seminggu seharga $59. Anda bayar sekali dan tidak ada perpanjangan otomatis. Mac dihapus di akhir masa sewa, jadi push kode Anda dan simpan .ipa Anda lebih dulu.
Pertanyaan yang sering diajukan
Bisakah Flutter build iOS di Windows?
+
Tidak. Di Windows dan Linux, Flutter sama sekali tidak menyediakan flutter build ios atau flutter build ipa. Panduan rilis Flutter bilang Anda harus memakai perangkat dengan macOS. Mac sewaan atau runner CI macOS bisa menangani langkah itu.
Bisakah saya menjalankan aplikasi Flutter di iOS Simulator dari Windows?
+
Tidak di Windows itu sendiri, karena Simulator ikut terpasang bersama Xcode. Anda bisa build di Mac remote dan melihat Simulator-nya lewat berbagi layar. Kami memasang dan meluncurkan aplikasi Flutter dengan xcrun simctl di runner macOS.
Apakah Flutter masih butuh CocoaPods untuk iOS?
+
Lebih jarang. Sejak Flutter 3.44, Swift Package Manager aktif secara default untuk iOS. Flutter kembali ke CocoaPods untuk plugin yang belum mendukungnya. Flutter bilang registry CocoaPods menjadi read-only pada 2 Desember 2026.
Bisakah saya build .ipa Flutter tanpa signing?
+
Anda bisa membuat archive tanpa signing. Dalam test kami, flutter build ipa --no-codesign membuat .xcarchive sebesar 170.4 MB, lalu bilang ia melewati IPA. File .ipa sungguhan untuk TestFlight butuh tim Apple Developer Anda.
Berapa lama build iOS Flutter di Mac?
+
Di runner macos-26 GitHub, build Simulator untuk aplikasi baru dengan satu plugin memakan waktu 48 detik. Build rilis tanpa signing memakan waktu 1 menit 14 detik. Aplikasi yang lebih besar butuh waktu lebih lama.
Apakah Flutter sudah terpasang di Mac MacRun?
+
Tidak. Xcode 27.1, Xcode 26.6 dan simulator iOS 27.1 sudah terpasang. Anda punya hak admin dan Homebrew, dan brew install --cask flutter selesai kurang dari satu menit dalam test kami.