Skip to content
Back To School Sale from $619, until 31st October 2026 Book now
appsubmitter.io
AI-built apps: Guidelines 5.6 & 2.3.1 iOS · App Store

Guideline 2.3.1 Rejection in AI-Built Apps: How Prompts Create Hidden Features and How to Document Them

A Guideline 2.3.1 rejection means App Review found functionality it couldn't reach, functionality your Notes for Review never described, or marketing the app doesn't live up to. AI-built apps get there easily: every prompt can add features, a republish changes the wrapped app overnight and generated copy promises things nobody checked. The fix is a feature inventory: list what the code really does, map each feature to a screen and a test step, remove leftovers and describe every change with specificity.

By the appsubmitter.io App Specialist Team, updated , 13 min read

Recommended solution: WebViewGold – native iOS and Android apps from your web app, made by our team.

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.1What 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

TermIn practiceTypical example in an AI-built appWay out
HiddenWorks, but the reviewer can't get to itAn area only an admin role sees; a premium tier behind a web checkout; screens behind a sign-in method that fails inside the appMake it reachable for the review account, or remove it for everyone
DormantShipped, but waiting for a triggerA "Pro" tab behind a flag that is still off; payment buttons wired to test keys; a feature parked behind a "coming soon" switchFinish and document it, or delete the code
UndocumentedReachable, but missing from the notesThe export button the agent added unasked; a chat widget published after the last submissionDescribe 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.

  1. Export the routes. Sync the project to GitHub or download the code, then list every page and route, including those no menu links to.
  2. 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.
  3. 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.
  4. Map each feature to a screen and a test step that a stranger can follow in two minutes, plus the account to use.
  5. Flag what the reviewer can't reach: anything behind a role, plan, region, flag, device or sign-in method the review account lacks.
  6. Decide per flag. Make it reachable, explain it (a screen recording for hardware, for example) or remove it for every user.
  7. 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:

FeatureWhere and how to testReview account can reach it?StatusAction
PDF invoicesBilling → open an invoice → DownloadYesNew in 1.4Describe in the notes
Admin console/admin, no link in the appNo – admin role onlyScaffolded, unusedRemove
AI summariesNotes → SummarizeYesUnchangedName the AI service in the notes
Pro upgradePricing → UpgradePartly – checkout runs on test keysDormantIn-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:

BuilderHow a change reaches app usersCheck firstDeep dive
LovableEach publish deploys a new snapshot to the live URLPublishes after submission, generated role checks, Paddle or Stripe paywallsLovable and 2.3.1
BoltChanges reach the live site when you click Update in the Publish menuCommit history since submission, auth redirects, Stripe test keysBolt and 2.3.1
Base44Base44's own iOS build runs the published app in a web view, and most content changes go live without a new store versionWhat changed after the build was submittedBase44 and 2.3.1
Bubble, Replit, v0 and othersInstant content changes, preview and production deployments, visibility rulesConditions and user rolesBuilder 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

  1. Freeze new functionality until the next build is approved. Content updates and bug fixes can continue.
  2. Run the feature inventory and remove leftovers.
  3. 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.
  4. 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.
  5. 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.

Hello App Review Team,

Thank you for reviewing [App name] (version [x.y], build [build number]) and for pointing out the issue under Guideline 2.3.1.

The web part of our app is built with [builder] and served from [domain]. We compared the code with our previous Notes for Review and found these gaps, which this submission resolves:

1. [Feature] was added after our last approved version and was not described. It is now listed below with test steps.
2. [Feature] was only reachable with an [admin / paid] account. An additional demo account is included below.
3. [Unused admin route / test checkout] was left over from development and has been removed.
4. [Claim on our website or in the description] did not match the app and has been removed.

Features in this version and how to reach them:
- [Feature 1] – [screen] – [steps]
- [Feature 2] – [screen] – [steps]

Accounts:
- [Role 1]: [username] / [password]
- [Role 2]: [username] / [password]

From now on, new functionality reaches app users only with a new version whose Notes for Review describe it.

Best regards,
[Your name]
[Company]

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?
Hidden means it works but the reviewer can't reach it, for example a screen behind an admin role or a sign-in that fails inside the app. Dormant means it ships switched off, waiting for a flag, a key or a date. Undocumented means it is reachable but missing from your Notes for Review. Guideline 2.3.1 rejects all three, deliberate or not.
Is a Guideline 2.3.1 rejection a sign that Apple spotted AI-generated code?
No. The guideline judges what the app does and what you told App Review, not which tool wrote it. When Apple blocked updates of vibe-coding tool apps in March 2026, it cited Guideline 2.5.2 and said it has no rules specific to vibe coding. AI-built apps simply produce undocumented changes more easily.
Can my builder's chat history serve as the change log for App Review?
Not on its own. The chat shows what you asked for, including attempts that were reverted or replaced, and it doesn't say which state was live during a review. A Git repository synced from the builder and tagged at each submission shows what really changed. Use the chat only to remember why a feature exists.
Should the Notes for Review mention my builder and backend services?
Naming the builder isn't required, but naming the services helps. Apple's guidance on complete reviews asks you to list the external services, tools or platforms that deliver core functionality – for example authentication services, payment processors or AI services. For a wrapped app, also say that the interface loads from your server and that new functionality ships with new app versions.
Can repeated 2.3.1 rejections affect my developer account?
They can. Guideline 2.3.1(b) states that egregious or repeated behavior is grounds for removal from the Apple Developer Program, and 2.3.1(a) names termination of the developer account as a consequence of misleading marketing. A first rejection resolved with an inventory and specific notes is usually a process fix. Repeating the same gap is what raises the stakes.
How does WebViewGold help keep features tied to the reviewed build?
WebViewGold, built by our team, can pass the installed app version and build number to your web code, and its custom user agent can carry the same marker. Your AI-built web app can then show a new feature only to builds whose Notes for Review described it. It doesn't write your notes or decide the review – no tool can promise an approval.

Recommended solution

From WebView rejection to approval: WebViewGold + appsubmitter.io

  1. 1 Build with WebViewGold Turn your website into native iOS and Android projects.
  2. 2 Add native value Push, offline screen, deep links or scanning in your main flow.
  3. 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

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.

Talk to a real App Specialist

Turn your rejection into an approval

Book a free consultation call or let our App Specialists take over CI/CD, guidance on the fixes and the resubmission. Your app does not have to be 100% ready.

Back To School Sale prices until 31st October 2026. Prices in USD, excl. VAT.