Key takeaways
- Guideline 2.3.1 is a documentation and honesty rule: no hidden, dormant or undocumented features, specific Notes for Review for every change and no marketing or prices the app doesn't back up.
- AI builders create undocumented change by default – prompts add extras, a republish updates the wrapped app instantly and the chat history is not a changelog.
- A feature inventory built from the code, not from memory, shows what App Review could see and what your notes left out.
- In 2025 Apple rejected over 22,000 submissions for hidden or undocumented features and says machine learning flags problematic changes in app updates.
- WebViewGold, made by our team, can pass the installed app version to your web code so new features follow the reviewed build; appsubmitter.io writes the notes and talks to App Review.
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.3.1 - Performance - Accurate Metadata
Your app includes features that were not described in the Notes for Review and that we could not access during our review. New features, functionality and product changes must be described with specificity and be available for review.
Paraphrased example – the exact wording in your message may differ.
What a Guideline 2.3.1 rejection means for an AI-built app
A Guideline 2.3.1 rejection means App Review found a gap between what your app can do and what you showed or told the reviewer. In AI-built apps that gap rarely comes from intent. It opens on its own: the agent added features nobody listed, a republish changed the live app, or generated copy promised more than the app delivers.
The rule sits in the Accurate Metadata section of the App Store Review Guidelines (last updated June 8, 2026). Read phrase by phrase, it sets four duties and one warning:
| Wording in 2.3.1 | What it asks of an app an AI builder wrote |
|---|---|
| "hidden, dormant, or undocumented features" | Nothing in the code or on the server that the reviewer can't see, that waits to be switched on later or that nobody described – generated scaffolding included. |
| "described with specificity in the Notes for Review" and "generic descriptions will be rejected" | Each new feature gets its own line with a name, a screen and a test path. "Improvements" or "new AI tools" is not a description. |
| "accessible for review" | The demo account really reaches every feature – sign-in, roles, paid tiers and data included. |
| "promoting a false price, whether within or outside of the App Store" | Your generated landing page, ads and social posts count, not only the App Store listing. |
| 2.3.1(b): "Egregious or repeated behavior is grounds for removal from the Apple Developer Program." | Repeated gaps can cost you your program membership, not just one submission. |
This is not a rare edge case. Apple's own count for 2025 is more than 22,000 rejected submissions for hidden or undocumented features, and its review pairs people with machine learning built to "flag potentially problematic changes in app updates" (Apple Newsroom, May 20, 2026). An app that changes a lot between submissions gives that system plenty to look at. The listing side of the same section – names, keywords, screenshots, What's New – is covered in our Guideline 2.3 guide.
Why do AI-built apps end up with undocumented features?
Hand-written apps drift too, but AI builders remove the natural brakes: code review, release branches and a person who knows what changed. Four mechanisms stand out.
- Every prompt can add a feature. Agents rarely do exactly one thing. Ask for a settings page and you may also get a CSV export, team invitations and a theme switch. Each extra is functionality the reviewer may find and your notes don't mention.
- The chat history is not a changelog. It records what you asked for, including attempts that were reverted or overwritten later. It can't tell you which features were live in which build – and that is the question App Review asks.
- Publishing is a release. One click deploys the web app, and a native app that loads your URL changes with it. The app Apple approved and the app your users run can differ within a day, without anyone deciding to change the iOS app.
- Scaffolding stays behind. On the way to what you wanted, the agent may have built an admin dashboard, seed data, test routes and half-finished screens. Code that exists but isn't reachable is the textbook dormant feature.
A fifth source isn't code at all: the marketing text the builder generated for you. It gets its own section below.
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.
Hidden, dormant, undocumented: how each one shows up in generated apps
| Term | In practice | Typical example in an AI-built app | Way out |
|---|---|---|---|
| Hidden | Works, but the reviewer can't get to it | An area only an admin role sees; a premium tier behind a web checkout; screens behind a sign-in method that fails inside the app | Make it reachable for the review account, or remove it for everyone |
| Dormant | Shipped, but waiting for a trigger | A "Pro" tab behind a flag that is still off; payment buttons wired to test keys; a feature parked behind a "coming soon" switch | Finish and document it, or delete the code |
| Undocumented | Reachable, but missing from the notes | The export button the agent added unasked; a chat widget published after the last submission | Describe it with a screen and test steps |
Leftovers are the easiest of the three to remove. Search the code for routes such as /admin, /test, /debug or /dev, for sample users and placeholder records in seed files, and for components no screen links to. Guideline 2.1 already asks for "placeholder text, empty websites, and other temporary content" to be scrubbed before submission; in an AI-built app the same cleanup protects you under 2.3.1.
The feature inventory: turn your code into a feature list
Apple rarely names the feature it means, and nobody remembers two hundred prompts. Build the list from the source instead. It takes an afternoon and becomes the base of every later submission.
- Export the routes. Sync the project to GitHub or download the code, then list every page and route, including those no menu links to.
- List the server side. Database tables, serverless or edge functions, scheduled jobs, webhooks and integrations such as payments, email or AI models. They are invisible in the interface but often power what is visible.
- Ask the agent, then check the answer. A prompt like
List every user-facing feature, its route and every role, plan or flag that controls it. Do not change any code.gives you a first draft. Verify it against the routes – agents describe what they meant to build, which isn't always what exists. - Map each feature to a screen and a test step that a stranger can follow in two minutes, plus the account to use.
- Flag what the reviewer can't reach: anything behind a role, plan, region, flag, device or sign-in method the review account lacks.
- Decide per flag. Make it reachable, explain it (a screen recording for hardware, for example) or remove it for every user.
- Diff against the last approved version. Everything that is new since then belongs in this submission's notes.
The result is a short table you keep next to the code:
| Feature | Where and how to test | Review account can reach it? | Status | Action |
|---|---|---|---|---|
| PDF invoices | Billing → open an invoice → Download | Yes | New in 1.4 | Describe in the notes |
| Admin console | /admin, no link in the app | No – admin role only | Scaffolded, unused | Remove |
| AI summaries | Notes → Summarize | Yes | Unchanged | Name the AI service in the notes |
| Pro upgrade | Pricing → Upgrade | Partly – checkout runs on test keys | Dormant | In-App Purchase for digital access, or remove |
Builder by builder: where to start looking
The mechanics differ per builder (as of October 2026), and so does the first place to check. Our product articles go into detail:
| Builder | How a change reaches app users | Check first | Deep dive |
|---|---|---|---|
| Lovable | Each publish deploys a new snapshot to the live URL | Publishes after submission, generated role checks, Paddle or Stripe paywalls | Lovable and 2.3.1 |
| Bolt | Changes reach the live site when you click Update in the Publish menu | Commit history since submission, auth redirects, Stripe test keys | Bolt and 2.3.1 |
| Base44 | Base44's own iOS build runs the published app in a web view, and most content changes go live without a new store version | What changed after the build was submitted | Base44 and 2.3.1 |
| Bubble, Replit, v0 and others | Instant content changes, preview and production deployments, visibility rules | Conditions and user roles | Builder traps in our 5.6 overview |
If App Review has already escalated to the Developer Code of Conduct, the product articles on 5.6 for Lovable, Bolt and Base44 cover that situation.
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.
Where 2.3.1 meets Guidelines 4.2 and 5.6
Not only a WebView problem
In May 2026 a developer described on the Apple Developer Forums how a fully native shift-tracking app – no WebView at all – passed review twice and then had updates rejected under 2.3.1(a) and 4.2 after gaining features such as a monthly calendar with shift templates. The letter said the app "has hidden features and feels similar to a web browsing experience", and App Review's answer in the thread pointed to an appeal to the App Review Board. One anecdote proves little, but the lesson is useful: new features that weren't spelled out can trigger 2.3.1 whatever the technology. Our article on the 2.3.1 and 4.2 combination explains how to answer such a letter.
The rule and the escalation
2.3.1 is the rule: functionality was undocumented or out of reach. Guideline 5.6 is the escalation. Developers who received 5.6 letters in 2026 report wording about features "that appear to have been intentionally hidden during the review process" – the same facts, read as a question of intent. 2.3.1(b) connects the two, because repeated gaps can end your program membership. Fix the process after the first 2.3.1 letter and the conduct question rarely comes up.
Generated marketing copy and prices count too
The same paragraph of 2.3.1 treats misleading marketing – "promoting content or services that it does not actually offer" or a false price, "whether within or outside of the App Store" – as grounds for removing the app and terminating the developer account. AI builders produce exactly this kind of copy in seconds:
- Landing pages with invented user numbers, star ratings and testimonials.
- Feature grids listing integrations or "AI-powered" tools the agent never built.
- Pricing tables with a "free" plan that is really a trial, or discounts that ended weeks ago.
- App Store descriptions pasted from that landing page.
If your wrapped app opens on the landing page, that page is part of the app as well as your marketing. Check it with the same care as the listing – the article on misleading marketing under 2.3.1 walks through claims, prices and AI promises in detail.
Fixing the rejection and keeping it fixed
- Freeze new functionality until the next build is approved. Content updates and bug fixes can continue.
- Run the feature inventory and remove leftovers.
- Prepare accounts. Apple wants a username and password "that work at the time of submission"; for several account types, such as admin and regular users, the extra credentials go into the Notes field. Our 2.1 Information Needed guide covers codes, region locks and demo videos.
- Write the notes. Apple's guidance for updates reads: "Describe what's changed, and where reviewers can find significant new content or features." Add the external services the app depends on – Apple's examples include authentication services, payment processors and AI services. The field holds up to 4,000 bytes; templates are in our Notes for Review guide.
- Upload a new build if code changed, then reply to App Review with what you found and fixed.
For the native side, WebViewGold – the website-to-app product our team builds – gives an AI-built web app a few mechanics that support 2.3.1. Its App Version Check API passes the installed version and build number to your web code, and a custom user agent can carry the same marker, so a new feature can stay off until the build whose notes describe it. Screens that must not change after review, such as onboarding, can be bundled into the app as local HTML. Native modules – push, Face ID, the QR scanner, StoreKit purchases, Apple's rating dialog – are enabled at build time, which makes them easy to list in your notes. You buy it once and release under your own developer account; like any tool, it can't make App Review's decision for you.
appsubmitter.io covers the review paperwork: an AI-powered pre-submission check, then an App Specialist who goes through your feature list with you, writes precise Notes for Review and talks to App Review from within your own developer account. Code changes are discussed and quoted separately. Book the iOS submission service, or ask your questions first 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 route, page and backend function in the repository appears in your feature inventory.
- Each feature has a screen, a test step and an account that can reach it.
- Scaffolded admin pages, test routes, seed users and placeholder content are gone.
- No flag, test key or "coming soon" switch waits to activate functionality after approval.
- Everything new since the last approved version is described specifically in the Notes for Review.
- Demo credentials work at submission time, and every account type has its own login in the Notes field.
- Landing page, ads, listing and in-app copy only promise what the app does, at prices that are true.
- No new functionality is published to the web app while the build is in review.
- Authentication, payment and AI services the app relies on are named in the notes.
- New features reach app users only with the build whose notes describe them, for example via a WebViewGold version marker.
Frequently asked questions
What counts as a hidden, dormant or undocumented feature?
Is a Guideline 2.3.1 rejection a sign that Apple spotted AI-generated code?
Can my builder's chat history serve as the change log for App Review?
Should the Notes for Review mention my builder and backend services?
Can repeated 2.3.1 rejections affect my developer account?
How does WebViewGold help keep features tied to the reviewed build?
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.3.1 Accurate Metadata
- Apple Developer – Provide information for a complete review
- App Store Connect Help – App Review information (Notes, demo account)
- Apple Newsroom – App Store fraud prevention in 2025 (May 20, 2026)
- Apple Developer Forums – Repeated 2.3.1(a) + 4.2 rejection after adding more native features (May 2026)
- 9to5Mac – Apple pushing back on vibe coding iPhone apps (March 18, 2026)
- WebViewGold Docs – App Version Check API (iOS)
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.