Lompat ke konten utama
Tutorial

Apakah Apple Mengizinkan Live Updates Tanpa Review App Store?

Ya, dengan batasan tertentu. Apple mengizinkan update over-the-air untuk code terinterpretasi seperti JavaScript, selama fungsi utama aplikasi tetap sama. Berikut aturan resminya dan cara penerapannya pada aplikasi Capacitor.

Apakah Apple Mengizinkan Live Updates Tanpa Review App Store?

Jawaban singkatnya: ya, Apple mengizinkan live updates, dengan batasan tertentu. Anda bisa push JavaScript, HTML, dan CSS baru ke aplikasi iOS tanpa review App Store baru, selama update tersebut tidak mengubah fungsi utama aplikasi. Anda tidak boleh download code native.

Kebingungan biasanya muncul karena mencampur dua hal berbeda: live updates code yang diinterpretasikan (diizinkan) dan download code executable baru (tidak diizinkan). Halaman ini mengutip aturan resminya, menunjukkan batasannya, dan menjelaskan cara Apple menerapkannya.

Ini bukan nasihat hukum. Ini adalah interpretasi aturan saat ini dan bagaimana ribuan aplikasi menerapkannya di produksi.

Apa isi aturan Apple sebenarnya

Ada dua teks penting. Pertama adalah Pedoman Peninjauan App Store 2.5.2:

Apps harus bersifat self-contained dalam bundle mereka, dan tidak boleh membaca atau menulis data di luar area container yang ditentukan, serta tidak boleh mengunduh, menginstal, atau mengeksekusi code yang memperkenalkan atau mengubah fitur atau fungsionalitas aplikasi, termasuk aplikasi lain.

Jika dibaca sendiri, itu terdengar seperti larangan. Pengecualiannya ada pada teks kedua, bagian 3.3.1(B) dari Perjanjian Lisensi Apple Developer Program, yang ditandatangani oleh setiap developer:

code yang diinterpretasikan boleh diunduh ke sebuah Aplikasi selama code tersebut: (a) tidak mengubah tujuan utama Aplikasi dengan menyediakan fitur atau fungsionalitas yang tidak konsisten dengan tujuan yang dimaksudkan dan diiklankan saat diajukan ke App Store, (b) tidak membuat toko atau storefront untuk code atau aplikasi lain, dan (c) tidak melewati signing, sandbox, atau fitur keamanan OS lainnya.

Jadi aturannya bukan “tidak boleh mengunduh code”. Melainkan “tidak boleh mengunduh native code, dan code yang diinterpretasikan hanya di bawah tiga kondisi”.

Web layer pada aplikasi Capacitor adalah JavaScript, HTML, dan CSS yang berjalan di WKWebView, yang merupakan engine WebKit milik Apple sendiri. Hal ini diinterpretasikan sebagai code, sehingga masuk dalam pengecualian. Guideline 4.7 menyatakan hal yang sama: Apple secara eksplisit mengizinkan aplikasi menjalankan konten HTML5 dan JavaScript yang tidak tertanam dalam binary.

Batasan penggunaannya

Diizinkan dengan live update Tidak diizinkan dengan live update
Bug fixes pada JavaScript, HTML, CSS Anda Download Swift, Objective-C, atau binary terkompilasi apa pun
Perubahan UI, perubahan copy, layar baru di web stack Anda Mengubah aplikasi menjadi produk berbeda (misal: aplikasi catatan jadi kasino)
A/B test dan rollout bertahap untuk web code Membuka fitur yang disembunyikan dari App Review
Update gambar, translasi, dan konfigurasi Membangun store untuk install aplikasi lain atau code
Melakukan rollback pada rilis yang bermasalah Melewati sandbox, signing, atau izin iOS

Capgo hanya mengirimkan kolom sebelah kiri. Ini mengganti web bundle di dalam aplikasi Anda. Segala hal yang bersifat native, seperti plugin Capacitor baru, izin baru, atau upgrade SDK, tetap memerlukan rilis App Store reguler. Capgo Penargetan versi memastikan bundle yang butuh native code baru tidak pernah sampai ke binary lama.

Cara Apple menegakkannya

Apple menilai substansi, bukan teknologi. Tidak ada yang kena masalah hanya karena memperbaiki typo via udara. Pola yang dikejar Apple adalah aplikasi yang lolos review sebagai satu hal, tapi berubah menjadi hal lain setelahnya. Itu melanggar guideline 2.3.1 (tidak ada fitur tersembunyi atau tidak terdokumentasi) maupun 2.5.2.

Dalam praktiknya:

  • Kirim apa yang seharusnya Anda submit, hanya saja lebih cepat.
  • Pastikan setiap update tetap sesuai dengan tujuan yang dijelaskan di listing App Store Anda.
  • Gunakan App Review untuk peluncuran fitur besar, dan gunakan live updates untuk perbaikan serta iterasi antar rilis.
  • Jangan pernah gunakan live update untuk mengaktifkan perilaku yang tidak dilihat oleh reviewer.

Jika mengikuti hal tersebut, Live Update menjadi bagian normal dalam merilis aplikasi iOS. Tim React Native sudah melakukannya bertahun-tahun dengan CodePush dan Expo Updates, dan tim Capacitor melakukannya dengan Capgo.

Stack mana saja yang bisa melakukannya di iOS?

Apakah aplikasi Anda bisa mengirim update over-the-air di iOS bergantung pada satu pertanyaan: apakah logika aplikasi Anda diinterpretasikan saat runtime? JavaScript dan code terinterpretasi lainnya, ya. Swift, Objective-C, dan C++ yang dikompilasi ke machine code, tidak. Framework dengan AOT-compiled seperti Flutter hanya bisa melalui interpreter.

Kompatibilitas live update iOS berdasarkan stack

Stack Cara code berjalan di iOS Live Update diizinkan? Tooling
Capacitor JavaScript, HTML, CSS di WKWebView (WebKit) Ya Capgo
Ionic (pada Capacitor) Sama dengan Capacitor Ya Capgo
Cordova JavaScript di WKWebView Ya Capgo setelah migrasi ke Capacitor, plugin Cordova lama
React Native / Expo bundle JavaScript di Hermes atau JavaScriptCore Ya, hanya JavaScript Expo Updates, alternatif CodePush self-hosted
NativeScript JavaScript pada engine embedded Ya, hanya JavaScript Terbatas, sebagian besar buatan sendiri
Flutter Dart dikompilasi AOT ke code mesin Hanya melalui interpreter Shorebird (interpreter Dart untuk patch)
Native Swift / Objective-C code mesin Tidak untuk native code; ya untuk JavaScript di WebKit atau JavaScriptCore Remote config dan server-driven UI
.NET MAUI / Xamarin C# yang dikompilasi AOT ke machine code Tidak Hanya remote config
Kotlin / Compose Multiplatform Kotlin/Native yang dikompilasi ke machine code Tidak Hanya remote config
Unity / Unreal C# via IL2CPP atau C++, hasil kompilasi Tidak untuk code, ya untuk konten Asset bundle, konten berbasis script (Lua)
Web wrapper (URL remote) Website yang dimuat di WebView Selalu live, tapi ada risiko review Tidak perlu, lihat catatan di bawah

Capacitor, Ionic, dan Cordova: didukung penuh

Web UI dan logika bisnis JavaScript aplikasi Anda berjalan di WKWebView, sementara native shell dan plugin tetap native. Apple Developer Program License Agreement bagian 3.3.1(B) mengizinkan code terinterpretasi yang diunduh hanya jika tetap menjaga tujuan utama aplikasi, tidak membuat code storefront, dan tidak melewati keamanan OS. Guideline 4.7 secara terpisah mengatur aplikasi yang menawarkan mini app HTML5 dan JavaScript serta menambahkan persyaratan tambahan.

live update menggantikan web bundle. Native shell, plugin, dan permission tetap sama dengan yang direview Apple. Itulah mengapa Capgo patuh secara desain: ia tidak bisa mengubah native code meskipun Anda menginginkannya. Plugin native atau permission baru tetap butuh rilis App Store.

React Native dan Expo: JavaScript bisa, native modules tidak

React Native menjalankan JavaScript bundle Anda di Hermes atau JavaScriptCore. Bundle tersebut adalah code terinterpretasi dan dapat diupdate secara over-the-air, seperti fungsi Expo Updates dan Microsoft CodePush (pensiun di 2025). Tim yang pindah dari CodePush butuh penggantinya.

Setiap perubahan pada native modules, versi React Native, atau Info.plist membutuhkan binary baru.

Flutter: hanya melalui interpreter

Di iOS, Flutter mengompilasi Dart secara ahead-of-time menjadi ARM machine code. Mengunduh machine code baru dilarang, sehingga Flutter standar tidak bisa menggunakan live updates. Shorebird mengatasinya dengan menjalankan patched Dart code di dalam interpreter, sehingga masuk dalam pengecualian interpreted code. Baca selengkapnya di live updates untuk aplikasi Flutter.

Native Swift, .NET MAUI, Kotlin Multiplatform: tidak ada update native code

Stack ini menghasilkan native machine code. Mereka tidak bisa mengunduh pengganti native code. Aplikasi native tetap bisa mengunduh dan mengeksekusi interpreted code, seperti JavaScript melalui JavaScriptCore, selama memenuhi syarat Apple. Anda juga bisa melakukan perubahan data secara over-the-air: remote config, feature flags untuk fitur yang sudah direview, server-driven UI, gambar, dan teks.

Unity dan game engine: konten bisa, code tidak

code game dikompilasi. Asset bundles (level, art, data balancing) adalah konten dan bisa diunduh. Bahasa scripting embedded seperti Lua adalah interpreted code dan mengikuti aturan yang sama dengan JavaScript.

Remote URL wrappers: live, tapi berisiko saat review

Aplikasi yang hanya memuat website Anda di dalam WebView akan "terupdate" setiap kali Anda deploy situs tersebut. Masalahnya bukan pada guideline 2.5.2, melainkan guideline 4.2 (minimum functionality): Apple menolak aplikasi yang hanya berupa website di dalam frame. Menggabungkan web app dengan Capacitor, menambahkan fitur native, dan menggunakan live updates dapat menghindari hal ini.

Apa yang tidak bisa dilakukan oleh stack apa pun di iOS

Apa pun framework Anda, live update tidak bisa:

  • Download code native, framework, atau dynamic library
  • Menambah permission atau entitlement baru
  • Mengubah aplikasi menjadi sesuatu yang tidak dijelaskan di listing App Store
  • Mengaktifkan fitur yang sebelumnya disembunyikan dari App Review

Langkah selanjutnya

Rilis perbaikan hari ini, tanpa menunggu review

Capgo live updates push perubahan JavaScript, HTML, dan CSS ke aplikasi Capacitor Anda dalam hitungan menit, dengan fitur channels, rollbacks, delta updates, dan end-to-end encryption. Bersifat open source dan bisa self-hosted.

bunx @capgo/cli@latest init

Ikuti quickstart untuk mengirim update pertama Anda.

Live update untuk aplikasi Capacitor

Saat bug di web layer sudah live, kirim perbaikannya lewat Capgo alih-alih menunggu berhari-hari untuk persetujuan app store. Pengguna menerima update di background, sementara perubahan native tetap di jalur review normal.

Terbaru dari Blog kami

Capgo memberikan insight terbaik yang Anda butuhkan untuk membuat aplikasi mobile yang benar-benar profesional.