AppReviewFix
Guideline library
Apple App Store — App Quality

2.5.1 — Public APIs only

Official source: App Store Review GuidelinesTopic overview: The review process, app quality and enforcement
What this guideline means

Any use of private API, even indirectly through a third-party SDK, is an automatic rejection — Apple's static analysis during review checks binaries for private API symbol references.

Why apps actually get flagged

Almost always caused unknowingly, by a third-party SDK or ad network library that references a private API internally — the app developer often doesn't know until the rejection arrives.

A real example

"Your app uses non-public APIs, which is not permitted on the App Store: [API list]. Please update your app..."

The short version, in more detail

Guideline 2.5.1 requires apps to use only Apple's public, documented APIs. Calling private frameworks or undocumented functions, even indirectly, can lead to automatic rejection because Apple scans binaries for such references. Most developers meet this rule unknowingly through a third-party library that touches a private API.

Why this rule exists

Private interfaces can change or disappear between operating-system releases, so an app that depends on them can break for users after an update. They can also bypass the protections and permissions that public APIs enforce. By requiring public APIs only, Apple keeps system updates predictable, protects user privacy and can analyse binaries automatically. That automated scanning is why this rule is enforced so consistently compared with rules that rely on human judgement.

What this guideline covers

  • Public versus private frameworks and symbols.
  • Static analysis of submitted binaries.
  • Third-party SDKs and libraries bundled in the app.
  • Documented usage of system features.

What usually triggers this rejection

  • An SDK that references a private API internally.
  • Calling undocumented functions to reach hidden system features.
  • An old library built against private interfaces.
  • Using runtime techniques to access private classes.
  • Linking against frameworks that are not intended for apps.

How reviewers evaluate it

  • Automated analysis checks symbols in the binary before human review.
  • A rejection message usually names the offending symbols.
  • The developer is responsible even if a library caused the reference.
  • The check is strict and consistent.

Common misunderstandings

  • Using a private API through a library is not a defence.
  • The detection does not depend on whether the code runs during review.
  • The rule is not about code quality but about stability and security.

Common questions

How do I know which API triggered it?

The rejection normally lists the symbols or frameworks that were detected.

Does this affect updates?

Yes, every submission is analysed.

Is Swift or Objective-C relevant?

The rule applies regardless of language.

Platform rules change often. This page is a plain-language explanation written by AppReviewFix, not official guidance. Check the current App Store Review Guidelines for the exact wording.

Got this exact rejection?Paste it in and get a diagnosis specific to your app, free.
Decode my rejection
Related guidelines
Malware — Malware policyHostile Downloaders — Hostile downloadersDevice Abuse — Device and network abuseSDK Requirements — Third-party SDK compliance2.5.2 — Self-contained apps
AppReviewFix
ProductDecoderPricingGuideline library
CompanyAboutFAQContact
ResourcesGuidesTopic overviewsCommon rejection reasons
LegalTermsPrivacy
© 2026 AppReviewFixBuilt by a developer, not a committee.