Skip to content
WebViewGold Vibe Coding to App Store
English
Get WebViewGold

App Store rejection

Guideline 4.2.2: when App Review calls your app a link collection, a brochure or an aggregator

4.2.2 is the narrower, sharper sibling of the 4.2 minimum functionality rule. The reviewer did not just find your app thin; they found it is mainly a menu of links, a marketing brochure or other people's content in a frame. The fix is not more links but one job the user can finish inside the app.

From $109 one-time per platform, or let our team do it all from $698.

  • Approval guarantee – or money back within 14 days
  • No coding needed
  • One-time payment, free updates
  • 24/7 human support
  • Made in Germany since 2014 · ISO 27001

What 4.2.2 says, and how it differs from 4.2

Guideline 4.2.2 says that, catalogs aside, apps should not be primarily marketing materials, advertisements, web clippings, content aggregators or a collection of links. The rejection usually cites "4.2.2 - Design - Minimum Functionality" and describes what the reviewer saw: the app mainly shows marketing content, mainly links out, or mainly repackages content from elsewhere, and offers little lasting value to the user.

The general Guideline 4.2 asks whether your app is more than a repackaged website, and the thin wrapper response covers apps that are fine as websites but feel like Safari. 4.2.2 is about purpose. A beautifully native app can still get it if its main content is a list of links or an advertisement for a business. Adding push notifications to a brochure does not change what it is.

Six app types that get the 4.2.2 label

Link-in-bio apps

A personal hub with buttons to Instagram, YouTube, a shop and a newsletter. Every tap leaves the app.

Agency or business brochures

About us, services, team, testimonials, contact form. Useful for a prospect once, not something anyone opens twice.

Menu-as-PDF restaurants and hotels

A PDF menu, opening hours and a booking button that opens a third-party site.

Aggregators of other people's content

RSS feeds, embedded articles from news sites, "best deals" lists of affiliate links. The value belongs to the sources, not to the app.

Directories of websites

The classic Lovable weekend project: "200 AI tools" as cards that each open the tool's website.

Event info apps

A schedule and venue map that link out to ticketing and streaming. Fine as a page, thin as an app.

From link to feature

What the app has nowWhat reviewers want to seeWebViewGold building block
Buttons that open external sites in SafariThe important content inside the app; leaving is the exceptionopenallexternalurlsinsafaribydefault false, partner domains in safariblacklist, secondary pages in an in-app tab with openspecialurlsinnewtab (URL handling docs)
Service pages and a contact formA task with a result: book, order, request a quote and follow its statusPush notifications for status changes (kPushEnabled, oneSignalID), permission asked with registerpush:// after the first booking
A feed of other sites' articlesYour own content or curation with personal value: saved items, a reading list, progressFavorites stored on the device with writevalue:// and readvalue:// (snippet below), an offline fallback page
A PDF menuA real menu with categories, allergens, favorites, ordering or reservations, and a loyalty cardWallet pass with addpkpass://; the PDF can stay as a download extra
A static event scheduleA personal agenda, reminders before sessions, ticket check-inqrcode:// or barcodescanner:// for check-in, .ics links for the calendar, push reminders
A home screen of linksShortcuts into the tasks people repeatHome Screen quick actions with useShortcuts and Shortcuts.json, a native tab bar with showNavFooter

I am very happy I bought this app! Extremely easy and great documentation. Was in contact with the customer service, they replied very quickly and very friendly. They solved my question within a day. 10/10 would recommend.

Nelis Geiger · CodeCanyon

Catalogs: the named exception and its limits

Apple exempts catalogs by name, and many retail apps rely on it. A catalog passes when it behaves like one: browse by category, search, filter, product detail pages with availability, favorites, maybe a store finder or a barcode scanner for in-store lookups (the result of barcodescanner:// lands in the barcodescanresult JavaScript variable). A catalog that is really a PDF brochure or a grid of links to a web shop is treated as marketing material. Physical goods are sold with your normal web checkout, not in-app purchase; see Guideline 3.1.1 for where that line runs.

Turn a 4.2.2 rejection around

  1. Write down the one job

    Finish this sentence before you touch code: "In [app], [who] can [task] in under a minute." If you cannot, the app needs a product decision first, not a build.

  2. Make the first screen about the job

    Open on the task, not on a hero banner. Hide marketing blocks inside the app with app-only CSS (custom CSS docs) or show a different start page by detecting the app through useragent_iphone / useragent_ipad in Config.swift.

  3. Keep users inside the app

    Set the URL handling so your own content and partner pages open in the app or an in-app tab. Only social profiles and truly external services should go to Safari.

  4. Give the app memory

    Favorites, history, progress, a cart, a saved filter. With an account, store it on your backend; without one, the Read/Write Value API keeps it on the device (read/write value docs).

  5. Add one reason to come back

    A real notification trigger: your order is ready, the session starts in 15 minutes, a saved item is back in stock. A push prompt with nothing behind it does not count.

  6. Test with someone who has never seen it

    Hand the TestFlight build to a friend and give them the job, not instructions. Where they get lost is where the reviewer will.

  7. Upload a new build and reply

    Describe the job and where each feature lives, using the template below, and update the review notes.

Favorites that stay on the device

A small helper for apps without accounts. Everything after writevalue:// is stored as one string; readvalue:// injects it back as window.storedValues. In a normal browser it falls back to localStorage.

javascript
// Favorites via the WebViewGold Read/Write Value API, localStorage on the web
// "MyAppIOS" is a marker you add to useragent_iphone and useragent_ipad in Config.swift
const inApp = navigator.userAgent.includes("MyAppIOS");

function saveFavorites(ids) {
  const value = JSON.stringify({ fav: ids });
  if (inApp) {
    window.location.href = "writevalue://" + encodeURIComponent(value);
  } else {
    localStorage.setItem("favorites", value);
  }
}

function loadFavorites(callback) {
  const parse = (raw) => {
    try { return JSON.parse(decodeURIComponent(raw)).fav || []; } catch (e) { return []; }
  };
  if (!inApp) { callback(parse(localStorage.getItem("favorites") || "")); return; }
  window.location.href = "readvalue://";
  setTimeout(() => callback(parse(window.storedValues || "")), 200);
}

Reply template for Resolution Center

Resolution Center reply (adapt the bracketed parts)
Hello App Review team,

Thank you for the feedback under Guideline 4.2.2. We agree that the previous build relied too much on links and marketing content, and we have reworked the app in build [number].

[App name] now helps [who] to [core job]. What changed:

1. The home screen opens on [task], not on marketing content. Promotional sections were removed from the app.
2. [Content / booking / ordering] now happens inside the app; only [social profiles] still open externally.
3. Users can [save favorites / keep a reading list / track their orders]; this is stored [in their account / on the device].
4. Push notifications inform users when [order is ready / session starts / saved item is back].

How to test: log in with [demo account] or use the app without an account, then [3 short steps that show the job].

Best regards,
[Name]

Changes that do not count

  • More links, a nicer grid of links, or a search box over the same links.
  • Embedding other sites in frames. It is still their content, and it can raise intellectual property questions on top.
  • A push permission prompt at launch with no notification type behind it.
  • Wrapping a website you do not own or run. That moves you from 4.2.2 toward copycat and impersonation problems.

Frequently asked questions

Is a link-in-bio app ever approved?

Rarely on its own. If you are a creator, build something your audience uses repeatedly instead, such as exclusive content, a community feed with your own posts, bookings or a shop with order tracking, and keep the links as a secondary screen.

My app is a product catalog. Am I safe?

Catalogs are exempt by name, as long as the app works as a catalog: categories, search, product details, favorites. A catalog that is a PDF or a list of links to a web shop is treated like marketing material.

Can a news app aggregate RSS feeds?

Pure aggregation of other publishers' content is exactly what 4.2.2 names. Original reporting, real curation with your own summaries, or personalization and offline reading give the app its own value.

Do I need user accounts to pass 4.2.2?

No. Accounts are one way to give the app memory. Device-side favorites, offline content, scanners or a calculator can be just as convincing, as long as the user can get a job done.

How is this different from a 4.3 spam rejection?

4.2.2 judges what your app is for. 4.3 judges whether it duplicates other apps, including your own. You can get both, and each needs its own fix; see the 4.3 guide for the duplicate side.

Three ways to get your app into the stores

Same result, different amount of work on your side. All three come with the approval guarantee and 24/7 human support.

Do it yourself

$109 per platform, one-time

The WebViewGold license: a finished Xcode or Android Studio project. Paste your URL, set name and icon, switch on features, build and submit. Free updates forever.

See plans on the main page

Cloud Builder

$349 per license, one-time add-on

No Mac, no Xcode, no Android Studio: configure in the browser, we build both apps in the cloud and hand them to App Store Connect and the Play Console.

How the Cloud Builder works Try the free demo

Full Service

$698 per platform $798

Send us your URL and icon. Our team configures, builds and delivers your app within 72 hours, white-label, with source projects. Both platforms for $1,158.

Full Service details Powered by WeSetupYourWebViewApp

Winter Sale prices valid until December 31, 2026.

Ready to ship your app?

App Store & Google Play approval guarantee – or your money back within 14 days

Rather hand it over? Full Service: we configure, build and deliver within 72 hours, from $698 per platform. Questions? Chat with us 24/7.

Refunds are granted under the conditions listed in our FAQ: a non-content rejection by Apple and/or Google, claimed within 14 days after purchase.