Repository navigation
Ship the iOS privacy manifest - #114
Merged
Merged
Conversation
ios/PrivacyInfo.xcprivacy was never packaged: the podspec had no resource bundle, and Package.swift had no resources (the file was also outside the CodePush target path). Apps got none of its declarations. Move it into ios/CodePush/ and ship it as a resource bundle from the podspec and as a resource of the CodePush SwiftPM target. Declare file timestamps with C617.1 instead of 0A2A.1. 0A2A.1 is for SDKs that only wrap timestamp APIs for the app to call. CodePush reads the timestamps itself, of its bundle files and of files in its update directory inside the app container. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
🔵 Needs a closer look
The manifest declares no collected data despite update checks and telemetry transmitting identifierForVendor, so the service owner must confirm retention and use beyond what the repository can establish.
No open issues 🎉
What changed in this PR
This PR configures CocoaPods and SwiftPM to include CodePush’s iOS privacy manifest in consuming apps, addressing a packaging gap, and updates the file-timestamp declaration to match the SDK’s usage.
Changes:
- Moves the manifest into the SwiftPM target directory and updates its Xcode project reference.
- Adds manifest resources to both package definitions.
- Replaces timestamp-access reason
0A2A.1withC617.1for access within the app container.
| File | Description |
|---|---|
Package.swift |
Adds the privacy manifest as a copied target resource. |
ios/CodePush/PrivacyInfo.xcprivacy |
Relocates the manifest and updates the timestamp-access reason. |
ios/CodePush.xcodeproj/project.pbxproj |
Points the manifest reference to its new location. |
CodePush.podspec |
Adds the CodePushPrivacyInfo resource bundle. |
Review effort: Balanced
miklosboros
approved these changes
Nov 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ios/PrivacyInfo.xcprivacyhas been in the repo since the upstream manifest PR, but no build ever packaged it. The podspec had no resource bundle, andPackage.swifthad no resources. The file also sat outside theCodePushtarget path, so SwiftPM couldn't have picked it up anyway. Apps that use CodePush got none of its declarations.This came up in #113 (#113 (comment)), where a review asked to declare a new API in this file.
Changes
ios/CodePush/so it lives inside the SwiftPM target.CodePushPrivacyInforesource bundle.CodePushtarget.C617.1instead of0A2A.1. This matters now that the declaration actually reaches App Store review. Details below.Why
C617.1From Apple's reason list:
CodePush doesn't wrap anything for the app. It reads timestamps itself, in two places:
lstaton files in its update directory, in the app's data container.C617.1covers that.main.jsbundleinside the.app. Apple doesn't say whether the app bundle counts as part of the "app container". React Native makes the same call, though: bothReact.frameworkandReact-cxxreactdeclareC617.1for file timestamps.🤖 Generated with Claude Code