Skip to content

Ship the iOS privacy manifest - #114

Merged
ofalvai merged 1 commit into
masterfrom
ios-ship-privacy-manifest
Nov 12, 2026
Merged

ofalvai merged 1 commit into
masterfrom
ios-ship-privacy-manifest

Conversation

@ofalvai

@ofalvai ofalvai commented Nov 10, 2026 •

Copy link
Copy Markdown
Collaborator

ios/PrivacyInfo.xcprivacy has been in the repo since the upstream manifest PR, but no build ever packaged it. The podspec had no resource bundle, and Package.swift had no resources. The file also sat outside the CodePush target 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

  • Move the manifest to ios/CodePush/ so it lives inside the SwiftPM target.
  • CocoaPods ships it as the CodePushPrivacyInfo resource bundle.
  • SwiftPM ships it as a resource of the CodePush target.
  • Declare file timestamp access with C617.1 instead of 0A2A.1. This matters now that the declaration actually reaches App Store review. Details below.

Why C617.1

From Apple's reason list:

0A2A.1: Declare this reason if your third-party SDK is providing a wrapper function around file timestamp API(s) for the app to use, and you only access the file timestamp APIs when the app calls your wrapper function.

C617.1: Declare this reason to access the timestamps, size, or other metadata of files inside the app container, app group container, or the app's CloudKit container.

CodePush doesn't wrap anything for the app. It reads timestamps itself, in two places:

  • lstat on files in its update directory, in the app's data container. C617.1 covers that.
  • The modification date of main.jsbundle inside the .app. Apple doesn't say whether the app bundle counts as part of the "app container". React Native makes the same call, though: both React.framework and React-cxxreact declare C617.1 for file timestamps.

🤖 Generated with Claude Code

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>
Copilot AI balanced review requested due to automatic review settings November 10, 2026 20:00

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 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.1 with C617.1 for 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

@ofalvai
ofalvai merged commit d118dc5 into master Nov 12, 2026
7 checks passed
@ofalvai
ofalvai deleted the ios-ship-privacy-manifest branch November 12, 2026 10:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants