Key takeaways
- Guideline 2.5.2 forbids code that introduces or changes features; Apple's license agreement allows downloaded interpreted code only if it keeps the app's primary purpose and security intact.
- Showing your own website in a WKWebView is not what 2.5.2 is about – remote code that adds features, swaps the product or runs other people's apps is.
- Live-update tools for Capacitor and React Native are meant for fixes and small changes; their own documentation says behavior changes need review.
- Apple's March 2026 block on Replit and Vibecode updates concerned tool apps that run generated apps inside themselves, not apps built with those tools.
- With WebViewGold, our team's product, the native capabilities are fixed in the reviewed build, whether you load a live URL or bundle your HTML locally.
Our recommended solution
Rebuild your wrapper with WebViewGold – a real app, not just a website in a frame
WebViewGold turns your website into native iOS and Android apps with push notifications, a native offline screen, deep links, a QR scanner and more – the building blocks App Store reviewers look for. Built by our own team, and we submit WebViewGold apps all the time.
What the rejection typically looks like
Guideline 2.5.2 - Performance - Software Requirements
Your app downloads or executes code that introduces or changes features or functionality of the app. Specifically, the app loads functionality from a remote source that was not part of the binary we reviewed.
Next Steps
Remove the downloaded code, or include the functionality in your app binary and submit it for review.
Paraphrased example – the exact wording in your message may differ.
What Guideline 2.5.2 and Apple's license agreement say
A WebView app rejected under Guideline 2.5.2 stands accused of something specific: running code App Review never saw that changes what the app does. The guideline reads (App Store Review Guidelines):
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. Educational apps designed to teach, develop, or allow students to test executable code may, in limited circumstances, download code provided that such code is not used for other purposes. Such apps must make the source code provided by the app completely viewable and editable by the user.
Section 3.3.1(B) of the Apple Developer Program License Agreement (updated August 18, 2026) draws the technical boundary. An app "may not download or install executable code". Interpreted code may be downloaded, but only so long as it:
(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 (b) does not bypass signing, sandbox, or other security features of the OS; and (c) for Applications distributed on the App Store, does not create a store or storefront for other Applications.
JavaScript on a web page is interpreted code, and Guideline 2.5.6 requires apps that browse the web to use WebKit – which is exactly what WKWebView is. So a WebView app is not a violation by default. The real question is never "does my app run JavaScript?" but "does the code it downloads change what the app is or does?"
Web content or downloaded functionality? Where the line runs
| What the app loads | Usually | Why |
|---|---|---|
| Your website's pages, articles and products in WKWebView | Fine | Content of the service App Review approved |
| Fixes and design updates to existing web features | Fine | Same features, same purpose |
| A new web feature such as bookings or chat | Needs a reviewed version | New functionality has to be described for review – see 2.3.1 for WebView apps |
| Live-update bundles for Capacitor or React Native | Fine for fixes, risky for features | Interpreted code, limited by the primary purpose |
| Server-driven native screens | Fine for reviewed screens | A problem once the server can assemble functionality nobody reviewed |
| HTML5 mini apps and games from third parties | Allowed with conditions | Guideline 4.7 applies |
| Apps generated or uploaded by users, run inside your app | High risk | Every new app changes your app's functionality |
| Native frameworks or plug-ins downloaded after install | Not allowed | Executable code may not be downloaded |
Apple's neighboring rule, 2.5.1 (public APIs, deprecated technologies such as UIWebView), is a different problem with its own fixes – see our 2.5.1 Software Requirements guide.
Rejected or stuck? Talk to an App Specialist – for free.
Book a free consultation call: we look at your rejection or setup, explain the fastest way forward and tell you honestly whether you need us. Prefer to hand it off? Book our AI-powered + human-powered service and we take care of it.
When a WebView app gets rejected under Guideline 2.5.2
These designs tend to draw 2.5.2 questions:
- The loader shell. The binary holds little more than a WebView, and a remote configuration decides which product it shows – recipes today, a casino tomorrow. That changes the primary purpose by design and touches Guideline 5.6 as well.
- A bridge that grows after review. Your web code starts calling native functions it never used during review, such as contacts access or background location. The capability was compiled in, but the feature arrived remotely – a dormant feature under 2.3.1 that can also read as remote code changing functionality.
- Downloadable modules. ZIP packages or script bundles that unlock new sections, sometimes as paid add-ons, which brings 3.1.1 payment rules into play.
- Other people's code. Plug-in directories, template galleries or "run your project" previews. Each item is software App Review never saw, and a catalog of them can look like a storefront for other apps.
- Live updates as the release channel. Every feature goes out over the air while the App Store build stays months behind.
Compare that with an ordinary WebView app: there, the website is the product, and its purpose was clear when App Review approved it.
Live updates in Capacitor and React Native apps: the rules of the road
Hybrid frameworks ship web or JavaScript bundles inside the app and can replace them over the air. The vendors describe the limits themselves:
- Capgo (Capacitor) updates only "the HTML, CSS, JavaScript, and assets already running in the app’s WebView" and advises: "Use a native store release for every native change and for material changes that could affect the app’s reviewed purpose or functionality." (Capgo FAQ)
- Expo EAS Update (React Native) says updates must follow the store guidelines and that "this usually means changes to your app's behavior need to be reviewed" (Expo documentation).
- CodePush continues as a self-hosted server after Microsoft retired Visual Studio App Center on March 31, 2025 (Microsoft Learn).
The same principle applies to any over-the-air mechanism, including those in Cordova projects. A workable policy: fixes, copy, translations, styling and small improvements to reviewed features go over the air. New features, new permissions and anything touching payments or sign-in go through the App Store – like all native changes, which live updates can't deliver anyway. Saying in the review notes that live updates are limited to fixes is transparency, not a confession.
One Capacitor detail: its option to load a remote URL is documented as "intended for use with live-reload servers" and "not intended for use in production" (Capacitor docs). If you want your live website as the app, a wrapper built for that job is cleaner – our Capacitor alternatives article compares the options.
HTML5 mini apps and mini games: Guideline 4.7
Some WebView apps offer games or tools made by others. For that, Apple has a dedicated rule. Guideline 4.7 begins:
Apps may offer certain software that is not embedded in the binary, specifically HTML5 and JavaScript mini apps and mini games, streaming games, chatbots, and plug-ins. Additionally, retro game console and PC emulator apps can offer to download games. You are responsible for all such software offered in your app, including ensuring that such software complies with these Guidelines and all applicable laws.
The sub-rules make that responsibility concrete: the software follows the privacy rules, comes with filtering, reporting and blocking, and uses In-App Purchase for digital goods (4.7.1). Your app may not expose native platform APIs to it without Apple's prior permission (4.7.2) or share data and privacy permissions with an individual piece of software without explicit consent each time (4.7.3). You also need an index of all offered software with universal links (4.7.4) and an age restriction mechanism for software above your app's age rating (4.7.5).
4.7.2 matters for WebView apps with a JavaScript bridge: your own pages calling your own native features is normal, but third-party games calling the same bridge need Apple's permission. If you host other people's software, plan for 4.7 from the start.
The fastest fix for most WebView rejections
WebViewGold: native features for your web app
Instead of building native features from scratch, start from WebViewGold. You get ready-made Xcode and Android Studio projects for your website, with native modules you switch on in the configuration:
- Push notificationsOneSignal or Firebase, for real, personal events
- Native offline screenNo browser error pages when the connection drops
- Native splash screenApp-like start instead of a loading web page
- Deep linksLinks open the right screen inside the app
- QR & barcode scannerDevice features the website alone can't offer
- In-app purchasesNative purchase flows where the store requires them
No tool guarantees an approval: Apple still judges what your app offers. Use the native features in your main user journey – our App Specialists review your WebViewGold app before it goes to the App Store.
The March 2026 vibe-coding case – and why your WebView app is different
In March 2026, Apple stopped updates of AI app builders such as Replit and Vibecode unless they changed their apps, as reported by The Information and 9to5Mac (March 18, 2026). Apple pointed to Guideline 2.5.2 and to section 3.3.1(B) of the license agreement, and said it has no App Store rules specifically against vibe coding apps. According to the reports, one way out was to show previews of generated apps in a web browser instead of inside the builder app.
The logic is easy to follow. In those tool apps, every prompt produces a new app that then runs inside the host app, so the host's functionality changes with each generation. A WebView app of your own website does the opposite: it presents one service with one purpose – the one App Review approved.
Apps built with Replit, Lovable and similar tools are therefore not what this case was about. Their review risks lie elsewhere, mostly in changes after approval – see how to turn a Replit app into an iOS app and our overview of AI-built apps and Guideline 5.6.
Remote URL or local HTML bundle? Choosing a WebViewGold setup
WebViewGold, the website-to-app product developed by our team, supports both models in its Xcode project, and the choice shapes your update process:
| Remote URL | Local HTML bundle | Hybrid | |
|---|---|---|---|
| Setup in Config.swift | Your address in webviewurl | uselocalhtmlfolder plus your files in local-www | Remote URL online, bundled files as offline fallback |
| Content updates | Instantly with your website | With a new build | Online instantly, offline copy with builds |
| Review angle | Content may change; new features ship with a reviewed version | Everything is in the reviewed binary | Keep both variants equivalent |
| Good for | Shops, communities, services with live data | Calculators, catalogs, tools that rarely change | Apps that must work offline |
In every setup the native side is fixed at build time. Push notifications, Face ID, the QR scanner or In-App Purchases are modules you enable in the project, and your web code can only use what the reviewed build contains – so new native capabilities always come with a new build. WebViewGold can also refresh an offline copy of your site from a ZIP file on your server; treat it like your website, as a copy of the reviewed experience. If such a package is needed on first launch, Guideline 4.2.3(ii) asks you to disclose its size and prompt users before downloading. Unsure which model fits? The App Specialists at appsubmitter.io can weigh it with you before you build.
Fixing a 2.5.2 rejection and explaining your architecture
- Map every remote input. List the URLs, bundles, configs and scripts the app loads after installation. Safari's Web Inspector shows a
WKWebView's traffic once you setisInspectable(iOS 16.4 and later) in a debug build. - Classify each input with the table above: content, interpreted code within the reviewed purpose, or functionality that belongs in the binary.
- Limit live-update channels to fixes and write that policy down.
- Move new features into a build or gate them by app version, and describe them in the Notes for Review.
- Stop hosting foreign code or implement Guideline 4.7 completely.
- Explain the architecture in your reply: what is loaded remotely, what sits in the binary and why remote content can't change the app's purpose.
If App Review mistook a plain website for downloaded functionality, a calm explanation – and, if needed, an appeal to the App Review Board – is the right path. appsubmitter.io handles exactly this conversation for WebView and hybrid apps: we review your setup, write the notes and talk to App Review from your own developer account; code changes are quoted separately upfront. Book the iOS service or describe your setup in a free consultation call.
Template: how to reply to App Review
Adapt this template to your situation. Keep it factual, short and specific – and only claim what you have actually changed.
Checklist before you resubmit
- Every remote input the app loads after installation – URLs, bundles, configs, scripts – is listed and classified.
- The app's primary purpose stays the same for every remote configuration; there is no loader shell that can become a different product.
- New features arrive with a new build or are gated by app version and described in the Notes for Review.
- Live-update channels deliver only fixes, copy and styling for features App Review has seen.
- No executable code, frameworks or plug-ins are downloaded after installation.
- Third-party mini apps or games, if offered, meet Guideline 4.7, including no native API access without Apple's permission.
- In WebViewGold or any other wrapper, native modules are switched on only if the reviewed version uses them.
- Offline packages needed on first launch show their size and ask the user before downloading.
- Your reply explains what is loaded remotely and what is part of the binary.
Frequently asked questions
Can a WebView app be rejected under Guideline 2.5.2 just for loading my website?
Can I use Capgo or another live-update service in my Capacitor app?
Why did Apple block updates of Replit and Vibecode in 2026?
Can my app offer HTML5 games made by other developers?
Is a local HTML bundle safer than a remote URL under 2.5.2?
Can I download new JavaScript for native screens of my app?
Recommended solution
From WebView rejection to approval: WebViewGold + appsubmitter.io
- 1 Build with WebViewGold Turn your website into native iOS and Android projects.
- 2 Add native value Push, offline screen, deep links or scanning in your main flow.
- 3 We submit it Our App Specialists submit and talk to the review team.
WebViewGold is made by our team (jocapps GmbH). It is a tool, not a guarantee – approval decisions are made by Apple and Google.
Sources and further reading
- Apple – App Store Review Guidelines, 2.5.2 Software Requirements
- Apple – App Store Review Guidelines, 4.7 Mini apps, mini games and plug-ins
- Apple – Apple Developer Program License Agreement (section 3.3.1(B) Executable Code)
- 9to5Mac – Apple pushing back on vibe coding iPhone apps (March 18, 2026)
- Capgo – FAQ: App Store and Play Store policies
- Expo – EAS Update introduction
- Capacitor – Configuration (server.url)
- Microsoft Learn – Visual Studio App Center retirement
Store policies and third-party products change regularly – always check the current versions. This article is independent advice and not affiliated with or endorsed by Apple, Google or any other company or product mentioned; all trademarks belong to their owners. WebViewGold and appsubmitter.io are made by our team at jocapps GmbH.