In Xcode, under Signing & Capabilities (Release) for our bundle ID the selected provisioning profile does include the entitlement: com.apple.developer.payment-pass-provisioning
However, when we upload a new build to TestFlight, the Build Metadata → Entitlements section for the same bundle ID does not include com.apple.developer.payment-pass-provisioning. Because of this, PKAddPaymentPassViewController does not open in TestFlight builds. This suggests that while the entitlement is enabled for the App ID and visible in Xcode, it may not yet be propagated to App Store Connect’s signing service for TestFlight/App Store builds.
Please Note: The Wallet Entitlements team had confirmed that they had granted entitlements for our team and the apple IDs
Xcode : 26.0.1
Profile being used: Distribution Profile
Thanks for that dump. Much nicer!
My reading of the stuff in your latest post suggests that you’re authorised to use the entitlement but you’re not actually claiming it. Remember that a provisioning profile acts an allowlist. It tells the system what entitlements you’re allowed to claim, but it doesn’t actually claim them. You actually claim entitlements in your app’s code signature.
Note To learn more about how this works, see TN3125 Inside Code Signing: Provisioning Profiles.
I usually debug problems like this by first confirming the nature of the problem:
- Instead of sending my app directly to App Store Connect, I export an archive. For example, when using Xcode’s organiser window I click Distribute App and then follow the Custom > App Store Connect > Export workflow.
- I then upload that archive using Transporter.
- Presuming that reproduces the problem, I unpack the archive by hand. See Unpacking Apple Archives.
- I can then dump the profile and the entitlements in the resulting app. The profile dump command is the same as the one I showed above. To dump the entitlements claimed by the app, do this:
% codesign -d --entitlements - /path/to/your.app
In your case I’d expect to see com.apple.developer.payment-pass-provisioning authorised by the profile but not claimed by the app. If that’s the case, you can work backwards through the build process to see how the app got that way.
Or perhaps you’ll see something different, which is interesting in and of itself.
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"