ITMS-91064: NSPrivacyTracking and NSPrivacyTrackingDomains must agree in every privacy manifest (true needs domains, domains need true); check, scan and privacy-manifest fail on either mismatch with the exact ITMS text; App Privacy tracking no longer demands the app manifest's true: SDK manifests that declare tracking (Pods, frameworks, SwiftPM, Carthage, plugins, the built IPA) are info, known tracking SDKs info, else a warning; privacy-manifest --propose writes true only with appPrivacy.trackingDomains; apple upload checks every manifest in the IPA (XML or binary) before any network call, apple build after the export. Pitfall 29

This commit is contained in:
CRTkafa 2026-10-12 10:27:21 +08:00
parent b7bfe89151
commit c8213be2b6
19 changed files with 631 additions and 44 deletions

View file

@ -176,7 +176,9 @@ describe('check: appPrivacy.types against the iOS project', () => {
const r = JSON.parse(out.at(-1)!);
const problems = (r.problems as string[]).join('\n');
expect(problems).toContain('Info.plist has no NSUserTrackingUsageDescription');
expect(problems).toContain('NSPrivacyTracking false');
// tracking from an SDK is declared in the SDK's manifest: the app's own false is not an error (ITMS-91064, pitfall 29)
expect(problems).not.toContain('NSPrivacyTracking false');
expect((r.warnings as string[]).join('\n')).toContain('no privacy manifest declares NSPrivacyTracking true');
expect(r.items.some((i: { what: string }) => i.what === 'app privacy')).toBe(true);
} finally { rmSync(dir, { recursive: true, force: true }); }
});