skip to content

Do over-the-air JavaScript updates to a React Native app break App Store or Google Play rules?

level: middleimportance: must knowfreq 60%

answer

  1. interpreted code is the carve-out
  2. same purpose as the reviewed app
  3. no storefront, no bypassing security
  4. Play excepts VM or interpreter code
  5. native changes still need a binary

basics

~20 s

Not by themselves. Both stores allow downloaded interpreted code such as a JS bundle, provided it keeps the reviewed app's purpose, adds no storefront for other code and bypasses no OS security. Native code changes still need a store release.

solid answer

~50 s

Over-the-air (OTA) updates replace a React Native app's JavaScript bundle and assets without a new store binary. **Apple** allows downloaded interpreted code only if it does not change the app's primary purpose, does not create a store or storefront for other code, and does not bypass signing, the sandbox or other OS security; the App Review Guidelines otherwise forbid apps from downloading code that introduces or changes features. **Google Play** forbids apps from updating themselves outside Play or downloading executable code such as dex or `.so` files, but excepts code that runs in a virtual machine or interpreter with indirect access to Android APIs, which is generally read as covering a JS bundle. So bug fixes and tweaks to reviewed features are fine; shipping a different app, hidden features or new native code over the air is not.

go deeper

for a junior

Remember that both stores allow a React Native app to download new JavaScript within limits, and that native code changes always need a store release.

for a middle

Explain Apple's three limits on downloaded interpreted code and Google Play's interpreter exception, with examples of acceptable and unacceptable OTA changes.

for a senior

Decide which changes go over the air and which through a reviewed release, knowing the technical boundary (JS and assets only) matches the policy boundary.

for a principal

Set a team policy on OTA use that keeps the store relationship safe: what counts as a fix, who approves an OTA push, and when a change must go through review.

## Why the question comes up A React Native app is a native binary plus a **JavaScript bundle** that the binary loads at startup. Because the bundle is just a file, it can be replaced after installation: an **over-the-air (OTA) update** downloads a new bundle and assets and runs them on the next launch, with no store review. Interviewers ask whether that is allowed because both stores have rules about apps changing themselves after review. ## What Apple allows Apple's rules pull in two directions: - The **App Review Guidelines** require apps to be self-contained and forbid downloading or executing code that introduces or changes features or functionality. - The **Apple Developer Program License Agreement** carves out **interpreted code**: it may be downloaded, but only if it 1. does not change the app's **primary purpose** by adding features inconsistent with what was submitted and advertised, 2. does not create a **store or storefront** for other code or apps, and 3. does not bypass **signing, the sandbox or other security** features of the OS. A React Native JS bundle is interpreted code in this sense (Hermes executes it), so an OTA update is allowed when it stays inside those three limits. ## What Google Play allows Google Play's Device and Network Abuse policy says an app may not **modify, replace or update itself** by any method other than Google Play's update mechanism, and may not download **executable code** such as dex, JAR or `.so` files from outside Play. It then excepts code that runs in a **virtual machine or interpreter** where either provides indirect access to Android APIs. A React Native bundle runs in the JS engine and reaches Android only through native modules already compiled into the binary, which is why OTA updates of the bundle are generally read as falling under that exception. ## What this means in practice | Change delivered over the air | Acceptable? | Why | |---|---|---| | Fix a crash in an existing screen | Yes | Same purpose, interpreted code | | Adjust copy, layout or styling | Yes | Within reviewed functionality | | Enable a feature hidden from the reviewer | No | Circumvents review of the app's purpose | | Turn the app into a different kind of app | No | Changes the primary purpose | | Download and run third-party mini-apps | No | Creates a storefront for other code | | Add a native module or permission | Impossible | Native code and entitlements live in the signed binary | ## The technical boundary matches the policy boundary An OTA update can only replace what the binary loads at runtime: the JS bundle and assets. It cannot add or change: - **Native code**, including a new native module, because that is compiled and signed into the binary. - **Permissions and entitlements**, which are declared in `AndroidManifest.xml`, `Info.plist` and the provisioning profile. - **The app's identity and version** as the store knows them. A bundle that calls a native module the installed binary does not contain simply fails. Keeping OTA bundles compatible with the binaries in the field is a separate topic. ## The scenario: a bank app's redesigned home screen A bank app plans a redesigned home screen. The team asks whether they can ship it over the air to skip review. The redesign uses only existing native modules and stays within the app's banking purpose, so the rules allow it. The better answer is to ship the first version through the stores anyway, where it gets a staged rollout, and keep OTA for fixes to it. A new biometric login using a new native module could never go over the air. ## Answering well in an interview 1. State that both stores permit downloaded interpreted code within limits. 2. Name Apple's three limits and Play's interpreter exception. 3. Give examples on each side of the line. 4. Point out that native changes need a binary for technical reasons, not only policy. 5. Add that OTA content still has to follow the store's content rules.

  • Can a React Native team use an OTA update to add a new native module, such as a biometric login?
    No. An OTA update only replaces the JavaScript bundle and assets. A native module is compiled and signed into the binary, and a new permission or entitlement lives in the manifest, Info.plist or provisioning profile. The JS that calls the new module needs a store release first; until then the call fails on installed binaries.
  • Does OTA content escape the store's content rules because the reviewer never saw it?
    No. The content still has to follow the store's guidelines; OTA only skips the review step, not the rules. An app that uses OTA to show content or features the reviewer could not see risks removal, which is why teams keep OTA for fixes and small changes to already-reviewed functionality.

saying these in an interview costs you the question

  • Any OTA update of a React Native app violates App Store rules.
  • OTA updates can add native modules if the JS calls them carefully.
  • Features hidden during review can be switched on later over the air.
  • Google Play allows apps to download .so files if they are signed.
  • Content shipped over the air is exempt from store content rules.