App Store Connect returns this when your app -- or an SDK it embeds --
calls one of Apple's five Required Reason API categories
and no PrivacyInfo.xcprivacy file in the app bundle declares
an approved reason for it. It doesn't matter whether the call is deliberate
or came in through a dependency; Apple checks the compiled binary's symbol
table, not your intent.
You have a manifest, but one of its declared reason codes isn't on Apple's
published list for that category. The most common cause is
copy-pasting an entry from one category's example while changing only the
NSPrivacyAccessedAPIType string -- the reason codes are not
interchangeable between categories.
| Category | Typical trigger |
|---|---|
| File timestamp | creationDate, modificationDate, stat()/fstat()/lstat(), getattrlist() |
| System boot time | ProcessInfo.processInfo.systemUptime, mach_absolute_time() |
| Disk space | volumeAvailableCapacityKey, systemFreeSize, statfs() |
| Active keyboard | UITextInputMode.activeInputModes |
| User defaults | UserDefaults, NSUserDefaults, SwiftUI's @AppStorage |
The checker on this site scans your source for these symbols, reads your manifest, and tells you exactly which category is used-but-undeclared or declared-with-an-invalid-code, with the file and line for every match. It runs as a browser tool (nothing uploaded) or a Node CLI you can add to your own pre-submission check.
This is evidence of what the code and the manifest say, not a determination that App Review will pass -- see the checker and its disclaimer for what it can and can't see, and verify against Apple's current documentation before you resubmit.