File timestamp
stat, fstat, lstat, getattrlist, NSFileModificationDate, NSURLCreationDateKey, NSURLContentModificationDateKey. Reasons: DDA9.1, C617.1, 3B52.1, 0A2A.1.
App Store Connect error
App Store Connect sends this email when a binary in your app uses a required-reason API and no privacy manifest in the app declares why. Most of the time the binary is a third-party SDK, not your own code.
It names an API category, for example NSPrivacyAccessedAPICategoryUserDefaults or NSPrivacyAccessedAPICategoryFileTimestamp, and asks you to add a PrivacyInfo.xcprivacy file that declares an approved reason. It doesn't say which framework triggered it.
stat, fstat, lstat, getattrlist, NSFileModificationDate, NSURLCreationDateKey, NSURLContentModificationDateKey. Reasons: DDA9.1, C617.1, 3B52.1, 0A2A.1.
mach_absolute_time, systemUptime. Reasons: 35F9.1, 8FFB.1, 3D61.1.
statfs, statvfs, NSFileSystemFreeSize, NSURLVolumeAvailableCapacityKey and related keys. Reasons: 85F4.1, E174.1, 7D9E.1, B728.1.
activeInputModes. Reasons: 3EC4.1, 54BD.1.
NSUserDefaults / UserDefaults. Reasons: CA92.1, 1C8F.1, C56D.1, AC6B.1.
Pick the reason codes that match what the code actually does; Apple's "Describing use of required reason API" page defines each one.
nm -u -j and look for the symbols above, then check whether that framework's PrivacyInfo.xcprivacy declares the category. We'll scan an SDK for free if you'd rather not.PrivacyInfo.xcprivacy to the app target with an NSPrivacyAccessedAPITypes entry for the category.<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array><string>CA92.1</string></array>
</dict>
</array>
Your customers get the email, not you. A manifest that was right in 2024 drifts: a new dependency calls stat(), a refactor adds UserDefaults. On 3 November 2026, 4 of 6 current public SDK releases we scanned had a required-reason reference their manifest didn't declare.
XCFramework Doctor scans the compiled .xcframework, slice by slice, against its manifest and fails your release build before the binary reaches a customer.