What it means
Starting May 1, 2024, apps that don't describe their use of required reason API in their privacy manifest file aren't accepted by App Store Connect.
Apple, Describing use of required reason API
Five categories exist: file timestamps, system boot time, disk space, active keyboards and user defaults. Each declared category needs at least one reason code from Apple's list (for user defaults, CA92.1 means access by the app itself). Apple requires the declaration for each executable or dynamic library: the bundle that contains it needs its own manifest, so a framework cannot rely on the app's file.
Deadline
In force since May 1, 2024 for new apps and app updates.
How to fix it
1. Find the category and the binary
The e-mail names the file and the categories. The store check reads the imported symbols of every executable in the IPA and lists, per binary, the undeclared category and the symbols that require it.
2. Declare it with an approved reason
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>In Xcode: File, New, File, App Privacy. Pick the reason code that matches the real use from Apple's list; the reason is a code, not free text.
3. Fix third-party frameworks at the source
If the category is missing in a framework's own bundle, upgrade the SDK to a release that ships a privacy manifest. Declaring it in your app's manifest does not cover a separate dynamic framework.
Check before you submit
Upload the IPA on the store check page. It runs APPSTORE-REQUIRED-REASON-API against the dates on this page, then deletes the file: nothing about the app is kept. The same engine runs offline in the Narvy CLI, and exits with code 1 when a blocker is found, so it can gate a CI job.
narvy store-check MyApp.ipaFAQ
Why does the store check report a warning and not a blocker?
Apple's scanner is not public, and App Store apps with undeclared imports exist, so a rejection cannot be predicted with certainty. Apple's documentation is clear that the declaration is required.
What does "not determined" mean for this check?
Some APIs (systemUptime, activeInputModes, fileModificationDate) are reached by Objective-C message name. The binary proves the message is sent, not to which class, so the check lists it for review instead of failing.