Build aplikasi iOS React Native tanpa Mac
Sebagian besar pekerjaan React Native lancar di Windows atau Linux. Build iOS tidak. CocoaPods dan xcodebuild butuh macOS, jadi Anda meminjam Mac untuk satu langkah itu. Di bawah ini ada workflow GitHub Actions yang melakukannya. Kami menjalankannya pada 2 Oktober 2026, dan workflow itu berhasil build React Native 0.87.1 dengan Xcode 26.6.
Yang berfungsi di Windows dan Linux
Kode JavaScript dan TypeScript Anda, Metro, dan Jest berjalan di desktop apa pun. Dalam test kami, aplikasi yang baru dibuat lulus test Jest di runner ubuntu-24.04 milik GitHub dan di runner windows-2025. Keduanya memakai Node 22. Anda juga bisa build dan menjalankan aplikasi Android di kedua sistem itu. Dokumentasi React Native menjelaskan setup Android untuk Windows dan untuk Linux.
Untuk iOS, dokumentasi yang sama berterus terang. Di halaman setup Windows dan Linux, tertulis bahwa Mac wajib untuk build proyek dengan kode native untuk iOS. Saran mereka adalah Expo Go, yang menjalankan JavaScript Anda di iPhone sungguhan selama development. Itu mencakup layar dan logika. Tetapi tidak menghasilkan aplikasi yang bisa dirilis.
Yang butuh macOS
- pod install. Proyek iOS menarik React Native dan dependency native-nya lewat CocoaPods. Codegen juga berjalan di langkah ini.
- xcodebuild. Xcode dan iOS SDK hanya ada untuk macOS. Di halaman system requirements Xcode, Apple mencantumkan macOS Tahoe 26.2 atau lebih baru untuk Xcode 26.6.
- Simulator. Simulator ada di dalam Xcode, jadi juga hanya untuk Mac.
- Signing dan upload. Bagian itu dibahas di merilis aplikasi iOS tanpa Mac.
Workflow yang kami jalankan
Workflow ini membuat aplikasi baru dengan perintah dari reactnative.dev. Workflow menjalankan test di Linux dan Windows. Lalu build iOS di runner macos-26. Flag init diambil dari dokumentasi React Native CLI. Flag itu memilih npm, melewati prompt pod, dan melewati setup git. Simpan di .github/workflows/rn-ios.yml dan jalankan dari tab Actions.
name: rn-ios
on: workflow_dispatch
jobs:
test-linux:
runs-on: ubuntu-latest
steps:
- uses: actions/setup-node@v7
with:
node-version: 22
- run: npx @react-native-community/cli@latest init RNDemo --pm npm --install-pods false --skip-git-init true
- run: npm test
working-directory: RNDemo
test-windows:
runs-on: windows-latest
steps:
- uses: actions/setup-node@v7
with:
node-version: 22
- run: npx @react-native-community/cli@latest init RNDemo --pm npm --install-pods false --skip-git-init true
- run: npm test
working-directory: RNDemo
build-ios:
runs-on: macos-26
steps:
- uses: actions/setup-node@v7
with:
node-version: 22
- run: sudo xcode-select -s /Applications/Xcode_26.6.app
- run: xcodebuild -version && node -v && ruby -v
- run: npx @react-native-community/cli@latest init RNDemo --pm npm --install-pods false --skip-git-init true
- run: node -p "require('react-native/package.json').version"
working-directory: RNDemo
- run: bundle install
working-directory: RNDemo/ios
- run: bundle exec pod install
working-directory: RNDemo/ios
- name: Build for the iOS Simulator (Debug)
run: |
xcodebuild -workspace RNDemo.xcworkspace -scheme RNDemo \
-configuration Debug -sdk iphonesimulator \
-destination 'generic/platform=iOS Simulator' \
-derivedDataPath build build
working-directory: RNDemo/ios
- name: Build for the iOS Simulator (Release, JS bundled)
run: |
xcodebuild -workspace RNDemo.xcworkspace -scheme RNDemo \
-configuration Release -sdk iphonesimulator \
-destination 'generic/platform=iOS Simulator' \
-derivedDataPath build build
working-directory: RNDemo/ios
- run: ls -la build/Build/Products/Release-iphonesimulator/RNDemo.app/main.jsbundle && du -sh build/Build/Products/*-iphonesimulator/RNDemo.app
working-directory: RNDemo/iosDi repo Anda sendiri, ganti langkah init dengan checkout kode Anda dan instalasi package-nya. Sisanya tetap sama. Ganti RNDemo dengan nama workspace dan scheme Anda.
Output dari eksekusinya
Baris-baris ini disalin dari log job build-ios. Seluruh job macOS memakan waktu 2 menit 42 detik.
Xcode 26.6 Build version 17F113 v22.23.2 0.87.1 Pod install took 43 [s] to run Pod installation complete! There are 87 dependencies from the Podfile and 86 total pods installed. ** BUILD SUCCEEDED ** Welcome to Metro v0.87.1 ** BUILD SUCCEEDED ** -rw-r--r-- 1 runner staff 1268567 Oct 2 04:02 build/Build/Products/Release-iphonesimulator/RNDemo.app/main.jsbundle 154M build/Build/Products/Debug-iphonesimulator/RNDemo.app 38M build/Build/Products/Release-iphonesimulator/RNDemo.app
Build Debug memakan sekitar 39 detik, dan build Release sekitar 35. Itu cepat karena React Native 0.87 mengunduh core yang sudah di-prebuild. Log pod install menyebutkannya dengan jelas. Versi lama mengompilasi jauh lebih banyak kode native, jadi build di sana lebih lama.
Mengapa build dua kali? Aplikasi Debug memuat JavaScript-nya dari Metro saat berjalan. Build Release mengemas JavaScript ke dalam aplikasi sebagai main.jsbundle, di sini 1.27 MB. Jika build Release lulus, bundle dan kode native Anda sama-sama terkompilasi.
Jalankan di setiap pull request
Workflow di atas dimulai secara manual. Untuk menangkap kerusakan iOS sebelum di-merge, ubah baris trigger agar juga berjalan di pull request:
on: pull_request: workflow_dispatch:
Saat build gagal, log-nya panjang. Log kami lebih dari 18,000 baris untuk dua build kecil. Cari "error:" di log dan baca hasil pertama. Error berikutnya sering hanya efek samping dari yang pertama. Jika pod install gagal, periksa Podfile dan dependency native Anda lebih dulu.
Biayanya
GitHub menagih setiap job dengan pembulatan ke atas per menit. Job macOS kami menjadi 3 menit. Dengan tarif $0.062 per menit, yaitu tarif di referensi harga runner GitHub pada Oktober 2026, totalnya sekitar 19 sen. Repository publik tidak membayar apa pun untuk runner standar. Untuk beberapa build per minggu, ini cara termurah mendapat build iOS.
Di Expo, ada jalur lain. EAS Build mengompilasi iOS di cloud milik Expo. Paket Free mencakup 15 build iOS per bulan di antrean prioritas rendah. Setelah itu, build iOS ukuran medium seharga $2, menurut expo.dev/pricing pada Oktober 2026.
Kapan CI tidak lagi cukup
Job CI membuktikan aplikasi bisa dikompilasi. Job CI tidak bisa menunjukkan aplikasinya. Build simulator hanya berjalan di iOS Simulator, yang butuh layar Mac. Saat modul native rusak hanya di iOS, Anda ingin Xcode terbuka. Anda ingin breakpoint dan Simulator yang bisa diklik. Untuk itu, lihat memakai Xcode dari Windows dengan Mac remote.
Runner hosted juga selalu mulai dari kosong. Setiap eksekusi mengunduh ulang package Node, gem, dan pod. Dalam eksekusi kami, job macOS juga membawa pemberitahuan dari GitHub. Isinya: job macOS arm64 bisa mengantre lebih lama karena keterbatasan kapasitas.
Siapa yang sebaiknya tidak menyewa Mac untuk ini
Jika Anda build beberapa kali per minggu, tetap pakai runner hosted atau EAS. Mac khusus baru menguntungkan di sekitar 2,242 menit macOS per bulan dengan tarif dasar GitHub. Mac khusus juga menguntungkan saat Anda butuh layarnya. Jika keduanya tidak berlaku, Mac sewaan adalah uang yang tidak perlu Anda keluarkan.
Jika Anda melewati batas itu, workflow yang sama berjalan di runner macOS self-hosted. Ubah runs-on dan arahkan xcode-select ke Xcode Anda. Pod dan derived data tetap hangat di antara eksekusi. Lihat harga untuk paket M6.
Pertanyaan yang sering diajukan
Bisakah saya build aplikasi iOS React Native di Windows?
+
Anda bisa menulis dan mengujinya di Windows, tetapi build iOS butuh macOS. Dokumentasi React Native menyebut Mac wajib untuk build proyek dengan kode native untuk iOS. Mac cloud atau CI runner menangani langkah itu.
Bisakah saya menjalankan iOS Simulator di Windows?
+
Tidak. Simulator ada di dalam Xcode, yang hanya berjalan di macOS. Anda bisa melihat Simulator di Mac remote lewat remote desktop, atau memakai Expo Go di iPhone sungguhan selama development.
Berapa lama build iOS React Native di GitHub Actions?
+
Dalam eksekusi kami pada Oktober 2026, aplikasi React Native 0.87.1 baru memakan 2 menit 42 detik untuk seluruh job macOS. Itu sudah termasuk pod install serta build simulator Debug dan Release. Aplikasi yang lebih besar butuh waktu lebih lama.
Apakah saya butuh akun Apple Developer untuk build ke Simulator?
+
Tidak. Workflow kami build untuk Simulator tanpa signing apa pun. Anda butuh Apple Developer Program berbayar untuk menandatangani aplikasi untuk perangkat, TestFlight, atau App Store.