Skip to main content
Tutorial

Does Apple Allow Live Updates Without App Store Review?

Yes, within limits. Apple allows over-the-air updates of interpreted code like JavaScript, as long as the app keeps its purpose. Here is the exact rule and how it applies to Capacitor apps.

Does Apple Allow Live Updates Without App Store Review?

Short answer: yes, Apple allows live updates, within limits. You can push new JavaScript, HTML and CSS to an iOS app without a new App Store review, as long as the update does not change what the app is. You cannot download native code.

Most of the confusion comes from mixing two different things: live updates of interpreted code (allowed) and downloading new executable code (not allowed). This page quotes the rules, shows where the line is, and explains how Apple enforces it.

This is not legal advice. It is how the rules read today and how thousands of apps use them in production.

What Apple’s rules actually say

Two texts matter. The first is App Store Review Guideline 2.5.2:

Apps should be self-contained in their bundles, and may not read or write data outside the designated container area, nor may they download, install, or execute code which introduces or changes features or functionality of the app, including other apps.

Read alone, that sounds like a ban. The exception lives in the second text, section 3.3.1(B) of the Apple Developer Program License Agreement, which every developer signs:

Interpreted code may be downloaded to an Application but only so long as such code: (a) does not change the primary purpose of the Application by providing features or functionality that are inconsistent with the intended and advertised purpose of the Application as submitted to the App Store, (b) does not create a store or storefront for other code or applications, and (c) does not bypass signing, sandbox, or other security features of the OS.

So the rule is not “no downloaded code”. It is “no downloaded native code, and interpreted code only under three conditions”.

A Capacitor app’s web layer is JavaScript, HTML and CSS running in WKWebView, which is Apple’s own WebKit engine. That is interpreted code, so it falls under the exception. Guideline 4.7 points the same way: Apple explicitly lets apps run HTML5 and JavaScript content that is not embedded in the binary.

Where the line is

Allowed with a live update Not allowed with a live update
Bug fixes in your JavaScript, HTML, CSS Downloading Swift, Objective-C or any compiled binary
UI changes, copy changes, new screens in your existing web stack Changing the app into a different product (a notes app becoming a casino)
A/B tests and gradual rollouts of web code Unlocking features hidden from App Review
Updating images, translations, config Building a store that installs other apps or code
Rolling back a bad release Bypassing the iOS sandbox, signing or permissions

Capgo only ships the left column. It replaces the web bundle inside your app. Anything native, such as a new Capacitor plugin, a new permission, or an SDK upgrade, still needs a regular App Store release. Capgo’s version targeting makes sure a bundle that needs new native code never reaches an old binary.

How Apple enforces it

Apple judges substance, not technology. Nobody gets pulled for fixing a typo over the air. The pattern Apple goes after is an app that passes review as one thing and becomes another thing afterwards. That is guideline 2.3.1 (no hidden or undocumented features) as much as 2.5.2.

In practice:

  • Ship what you would have submitted, just faster.
  • Keep every update within the purpose described in your App Store listing.
  • Send big feature launches through App Review, and use live updates for fixes and iteration between releases.
  • Never use a live update to switch on behavior that reviewers did not see.

If you follow that, live updates are a normal part of shipping an iOS app. React Native teams have done it for years with CodePush and Expo Updates, and Capacitor teams do it with Capgo.

Which stacks can do it on iOS?

The rule allows interpreted code, so it depends on how your framework runs your code. Capacitor, Cordova and Ionic are fully covered because they run in WebKit. React Native can update its JavaScript bundle. Native Swift apps cannot. The full breakdown, stack by stack, is in which stacks can use live updates on iOS.

Where to go next

Ship fixes today, not after review

Capgo live updates push JavaScript, HTML and CSS changes to your Capacitor app in minutes, with channels, rollbacks, delta updates and end-to-end encryption. It is open source and can be self-hosted.

bunx @capgo/cli@latest init

Follow the quickstart to send your first update.

Live updates for Capacitor apps

When a web-layer bug is live, ship the fix through Capgo instead of waiting days for app store approval. Users get the update in the background while native changes stay in the normal review path.

Latest from our Blog

Capgo gives you the best insights you need to create a truly professional mobile app.