Privacy Manifests: Incorrect "Missing API Declaration" error

I received an email from Apple saying my app is using the following privacy-restricted APIs without an API declaration.

NSPrivacyAccessedAPICategoryUserDefaults
NSPrivacyAccessedAPICategoryFileTimestamp
NSPrivacyAccessedAPICategorySystemBootTime

It's true, my app is using those features, in multiple pods that I depend on. For example, my app depends on the FBAudienceNetwork cocoapod, and I've upgraded it to version 6.15.0, which added a privacy manifest specifically to ensure that Apple wouldn't flag my app with an error.

https://developers.facebook.com/docs/audience-network/setting-up/platform-setup/ios/changelog/

I can see its privacy manifest explicitly covers these APIs, below:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>NSPrivacyTrackingDomains</key>
	<array>
		<string>ep1.facebook.com</string>
		<string>ep6.facebook.com</string>
	</array>
	<key>NSPrivacyCollectedDataTypes</key>
	<array>
		<dict>
			<key>NSPrivacyCollectedDataType</key>
			<string>NSPrivacyCollectedDataTypeAdvertisingData</string>
			<key>NSPrivacyCollectedDataTypeLinked</key>
			<true/>
			<key>NSPrivacyCollectedDataTypeTracking</key>
			<true/>
			<key>NSPrivacyCollectedDataTypePurposes</key>
			<array>
				<string>NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising</string>
				<string>NSPrivacyCollectedDataTypePurposeAnalytics</string>
			</array>
		</dict>
		<dict>
			<key>NSPrivacyCollectedDataType</key>
			<string>NSPrivacyCollectedDataTypeDeviceID</string>
			<key>NSPrivacyCollectedDataTypeLinked</key>
			<true/>
			<key>NSPrivacyCollectedDataTypeTracking</key>
			<true/>
			<key>NSPrivacyCollectedDataTypePurposes</key>
			<array>
				<string>NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising</string>
			</array>
		</dict>
	</array>
	<key>NSPrivacyAccessedAPITypes</key>
	<array>
		<dict>
			<key>NSPrivacyAccessedAPIType</key>
			<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
			<key>NSPrivacyAccessedAPITypeReasons</key>
			<array>
				<string>CA92.1</string>
			</array>
		</dict>
		<dict>
			<key>NSPrivacyAccessedAPIType</key>
			<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
			<key>NSPrivacyAccessedAPITypeReasons</key>
			<array>
				<string>35F9.1</string>
			</array>
		</dict>
		<dict>
			<key>NSPrivacyAccessedAPIType</key>
			<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
			<key>NSPrivacyAccessedAPITypeReasons</key>
			<array>
				<string>C617.1</string>
			</array>
		</dict>
	</array>
	<key>NSPrivacyTracking</key>
	<true/>
</dict>
</plist>

So, why is Apple flagging my app with "Missing API Declaration" errors? The API declaration is right there. What am I still missing?

Replies

Did you include the privacy manifest as required ? https://developer.apple.com/support/third-party-SDK-requirements/#:~:text=Third%2Dparty%20software%20development%20kits,obvious%20to%20developers%20and%20users.

you must include the privacy manifest for any SDK listed below when you submit new apps in App Store Connect that include those SDKs

  • I believe so, but I don't know how to prove or disprove that I included it correctly.

    I do know that when I generate a Privacy Report using the Xcode Organizer, it includes privacy settings from FBAudienceNetwork, which, as far as I know, must have come from FBAudienceNetwork's privacy manifest.

    I'm submitting the exact same build that generated the FBAudienceNetwork Privacy Report to App Store Connect, but, again, I don't know how to prove or disprove that I've done it correctly.

Add a Comment