privacy-manifest-check

Detects missing or incomplete PrivacyInfo.xcprivacy manifests and required-reason API declarations in iOS projects.

Updated Aug 14, 2026
One-click install
npx skills add https://github.com/tvh25082004/Badminton --skill privacy-manifest-check-tvh25082004
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: privacy-manifest-check
Source: https://github.com/tvh25082004/Badminton/tree/main/.claude/skills/apple-app-review/privacy/privacy-manifest-check
Command: npx skills add https://github.com/tvh25082004/Badminton --skill privacy-manifest-check-tvh25082004

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Apple rejects App Store submissions with ITMS-91053 errors when apps use required-reason APIs (like UserDefaults or mach_absolute_time) without declaring them in a PrivacyInfo.xcprivacy manifest. This Skill scans your iOS/macOS project before submission to catch missing manifests and undeclared API usage that would trigger automated rejection. ## Core Features & Use Cases - Manifest Existence Check: Verifies PrivacyInfo.xcprivacy exists and contains the NSPrivacyAccessedAPITypes array required since May 1, 2024. - Required-Reason API Scanning: Greps Swift and Objective-C sources for UserDefaults, file timestamp, identifierForVendor, and system boot time APIs, then cross-references each against declared reason codes (CA92.1, DDA9.1, 3EC4.1, 35F9.1). - Prioritized Findings Report: Outputs CRITICAL/HIGH/MEDIUM/LOW findings with file paths, line numbers, and exact remediation steps mapped to App Store Guideline 5.1. - Use Case: Before submitting an app that uses Firebase Performance SDK, run this check to discover that mach_absolute_time usage requires declaring NSPrivacyAccessedAPICategorySystemBootTime with reason 35F9.1, avoiding an ITMS-91053 rejection email. ## Quick Start Ask the assistant to run the privacy manifest check on your iOS project root before App Store submission to find missing PrivacyInfo.xcprivacy declarations.

Frequently Asked Questions about privacy-manifest-check

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I check if my iOS app needs a PrivacyInfo.xcprivacy file?▼

All apps submitted to the App Store must include a PrivacyInfo.xcprivacy manifest as of May 1, 2024. This check globs your project for the file and reports a CRITICAL finding if it is missing, since absence triggers an automated ITMS-91053 rejection.

How to fix ITMS-91053 missing API declaration rejection?▼

ITMS-91053 means your app uses a required-reason API without declaring it in PrivacyInfo.xcprivacy. Identify the API used (e.g., UserDefaults), then add the matching NSPrivacyAccessedAPITypes entry with the correct reason code such as CA92.1.

What reason code do I need for UserDefaults in the privacy manifest?▼

UserDefaults usage requires declaring NSPrivacyAccessedAPICategoryUserDefaults with reason CA92.1, though 1C8F.1, AC6B.1, or C617.1 are also accepted. The check greps Swift and Objective-C sources for UserDefaults and verifies the declaration exists.

Does this check work with third-party SDKs like Firebase or Datadog?▼

Yes, it flags SDK-related risks such as Firebase Performance calling mach_absolute_time internally, which requires declaring NSPrivacyAccessedAPICategorySystemBootTime with reason 35F9.1. Each third-party SDK must also ship its own PrivacyInfo.xcprivacy.

Can I use this check on Flutter or React Native projects?▼

Yes, the constraints state it works on Swift, Objective-C, React Native, and Flutter projects. It is read-only, makes no network calls, and scans source files for required-reason API patterns regardless of framework.

Why does my app get flagged for mach_absolute_time when I never call it?▼

Third-party SDKs like Firebase Performance call mach_absolute_time internally, and Apple's scanner counts SDK calls against your app. You must declare NSPrivacyAccessedAPICategorySystemBootTime with reason 35F9.1 even if your own code never uses the API.