Error when trying to sync Tap to Pay on iPhone capability
- Dominant language
- TypeScript
- Stars
- 1.4k
- Forks
- 236
- Avg merge
- 3d 1h
- Merged PRs (30d)
- 91
Description
### Build/Submit details page URL
_No response_
### Summary
My Expo app declares the following entitlements :
```
entitlements: {
'com.apple.developer.proximity-reader.payment.acceptance': true,
}
```
`eas build` fails on the capability syncing step. It seems that the capability name for Tap to Pay is `PR06102F2` on Apple side but EAS Build tries to PATCH `TAP_TO_PAY_ON_IPHONE`.
### Managed or bare?
managed
### Environment
```
expo-env-info 2.1.0 environment info:
System:
OS: macOS 26.5.2
Shell: 5.9 - /bin/zsh
Binaries:
Node: 24.16.0 - /Users/afournier/.nvm/versions/node/v24.16.0/bin/node
Yarn: 1.22.22 - /Users/afournier/.nvm/versions/node/v24.16.0/bin/yarn
npm: 11.13.0 - /Users/afournier/.nvm/versions/node/v24.16.0/bin/npm
Managers:
CocoaPods: 1.16.2 - /opt/homebrew/bin/pod
SDKs:
iOS SDK:
Platforms: DriverKit 25.5, iOS 26.5, macOS 26.5, tvOS 26.5, visionOS 26.5, watchOS 26.5
Android SDK:
API Levels: 33, 35, 36, 36
Build Tools: 34.0.0, 35.0.0, 36.0.0, 36.1.0, 37.0.0
System Images: android-36 | Google Play ARM 64 v8a
IDEs:
Android Studio: 2026.1 AI-261.23567.138.2611.15646644
Xcode: 26.6/17F113 - /usr/bin/xcodebuild
npmPackages:
babel-preset-expo: ~55.0.8 => 55.0.22
expo: ~55.0.25 => 55.0.26
expo-updates: ~55.0.23 => 55.0.24
react: 19.2.0 => 19.2.0
react-native: 0.83.6 => 0.83.6
npmGlobalPackages:
eas-cli: 21.8.0
Expo Workflow: managed
```
```
19/19 checks passed. No issues detected!
```
### Error output
```
✔ Bundle identifier registered com...appid
- Syncing capabilities
POST https://developer.apple.com/services-account/v1/bundleIds/BUNDLEID/bundleIdCapabilities
200 OK (POST https://developer.apple.com/services-account/v1/bundleIds/BUNDLEID/bundleIdCapabilities)
Current remote capabilities:
[
{
"context": {
"providerId": PROVIDERID,
"teamId": "TEAMID"
},
"id": "BUNDLEID_IN_APP_PURCHASE",
"attributes": {
"ownerType": "BUNDLE",
"settings": null,
"editable": true,
"inputs": null,
"enabled": true,
"responseId": "4e38194d-e809-4651-9ae4-ffba6253fe5f"
}
},
{
"context": {
"providerId": PROVIDERID,
"teamId": "TEAMID"
},
"id": "BUNDLEID_PR06102F2",
"attributes": {
"ownerType": "BUNDLE",
"settings": null,
"editable": true,
"inputs": null,
"enabled": true,
"responseId": "4e38194d-e809-4651-9ae4-ffba6253fe5f"
}
},
{
"context": {
"providerId": PROVIDERID,
"teamId": "TEAMID"
},
"id": "BUNDLEID_PUSH_NOTIFICATIONS",
"attributes": {
"ownerType": "BUNDLE",
"settings": null,
"editable": true,
"inputs": null,
"enabled": true,
"responseId": "4e38194d-e809-4651-9ae4-ffba6253fe5f"
}
}
]
Current local entitlements:
{
"com.apple.developer.proximity-reader.payment.acceptance": true,
"aps-environment": "development"
}
Will enable remote capability: com.apple.developer.proximity-reader.payment.acceptance (Tap to Pay on iPhone).
Will skip remote capability: aps-environment (Push Notifications).
Existing to disable: [ 'BUNDLEID_IN_APP_PURCHASE', 'BUNDLEID_PR06102F2' ]
Patch Request: [ { capabilityType: 'TAP_TO_PAY_ON_IPHONE', option: 'ON' } ]
PATCH https://developer.apple.com/services-account/v1/bundleIds/BUNDLEID
Error: Request failed with status code 409 (PATCH https://developer.apple.com/services-account/v1/bundleIds/BUNDLEID)
Failed to patch capabilities: [ { capabilityType: 'TAP_TO_PAY_ON_IPHONE', option: 'ON' } ]
✖ Failed to sync capabilities com...appid
Failed to update Apple capabilities for app "com...appid".
You can enable or disable capabilities manually in the Apple developer console at https://developer.apple.com/account/resources/identifiers/bundleId/edit/BUNDLEID, then re-run this command.
Auto capability syncing can be disabled with the environment variable `EXPO_NO_CAPABILITY_SYNC=1`.
Apple API error: The provided entity includes a relationship with an invalid value - The provided entity includes a relationship with an invalid value
Error: Failed to update Apple capabilities for app "com...appid".
You can enable or disable capabilities manually in the Apple developer console at https://developer.apple.com/account/resources/identifiers/bundleId/edit/BUNDLEID, then re-run this command.
Auto capability syncing can be disabled with the environment variable `EXPO_NO_CAPABILITY_SYNC=1`.
Apple API error: The provided entity includes a relationship with an invalid value - The provided entity includes a relationship with an invalid value
at syncCapabilitiesForEntitlementsAsync (/Users/afournier/.nvm/versions/node/v24.16.0/lib/node_modules/eas-cli/build/credentials/ios/appstore/bundleIdCapabilities.js:53:29)
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async syncCapabilitiesAsync (/Users/afournier/.nvm/versions/node/v24.16.0/lib/node_modules/eas-cli/build/credentials/ios/appstore/ensureAppExists.js:112:39)
at async ensureBundleIdExistsWithNameAsync (/Users/afournier/.nvm/versions/node/v24.16.0/lib/node_modules/eas-cli/build/credentials/ios/appstore/ensureAppExists.js:82:9)
at async ensureBundleIdExistsAsync (/Users/afournier/.nvm/versions/node/v24.16.0/lib/node_modules/eas-cli/build/credentials/ios/appstore/ensureAppExists.js:26:5)
at async AppStoreApi.ensureBundleIdExistsAsync (/Users/afournier/.nvm/versions/node/v24.16.0/lib/node_modules/eas-cli/build/credentials/ios/appstore/AppStoreApi.js:43:9)
at async SetUpTargetBuildCredentials.runAsync (/Users/afournier/.nvm/versions/node/v24.16.0/lib/node_modules/eas-cli/build/credentials/ios/actions/SetUpTargetBuildCredentials.js:19:13)
at async SetUpBuildCredentials.runAsync (/Users/afournier/.nvm/versions/node/v24.16.0/lib/node_modules/eas-cli/build/credentials/ios/actions/SetUpBuildCredentials.js:50:60)
at async IosCredentialsProvider.getRemoteAsync (/Users/afournier/.nvm/versions/node/v24.16.0/lib/node_modules/eas-cli/build/credentials/ios/IosCredentialsProvider.js:51:16)
at async IosCredentialsProvider.getCredentialsAsync (/Users/afournier/.nvm/versions/node/v24.16.0/lib/node_modules/eas-cli/build/credentials/ios/IosCredentialsProvider.js:36:32) {
cause: UnexpectedAppleResponse: The provided entity includes a relationship with an invalid value - The provided entity includes a relationship with an invalid value
at l.parseResponse (/Users/afournier/.nvm/versions/node/v24.16.0/lib/node_modules/eas-cli/node_modules/@expo/apple-utils/build/index.js:1:850721)
at l.requestAndParseAsync (/Users/afournier/.nvm/versions/node/v24.16.0/lib/node_modules/eas-cli/node_modules/@expo/apple-utils/build/index.js:1:849106)
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async l.fetchSingleModelAsync (/Users/afournier/.nvm/versions/node/v24.16.0/lib/node_modules/eas-cli/node_modules/@expo/apple-utils/build/index.js:1:848829)
at async l.patchModelAsync (/Users/afournier/.nvm/versions/node/v24.16.0/lib/node_modules/eas-cli/node_modules/@expo/apple-utils/build/index.js:1:848935)
at async l.updateBundleIdCapabilityAsync (/Users/afournier/.nvm/versions/node/v24.16.0/lib/node_modules/eas-cli/node_modules/@expo/apple-utils/build/index.js:1:950763)
at async syncCapabilitiesForEntitlementsAsync (/Users/afournier/.nvm/versions/node/v24.16.0/lib/node_modules/eas-cli/build/credentials/ios/appstore/bundleIdCapabilities.js:43:13)
at async syncCapabilitiesAsync (/Users/afournier/.nvm/versions/node/v24.16.0/lib/node_modules/eas-cli/build/credentials/ios/appstore/ensureAppExists.js:112:39)
at async ensureBundleIdExistsWithNameAsync (/Users/afournier/.nvm/versions/node/v24.16.0/lib/node_modules/eas-cli/build/credentials/ios/appstore/ensureAppExists.js:82:9)
at async ensureBundleIdExistsAsync (/Users/afournier/.nvm/versions/node/v24.16.0/lib/node_modules/eas-cli/build/credentials/ios/appstore/ensureAppExists.js:26:5) {
errorInfo: 'The provided entity includes a relationship with an invalid value - The provided entity includes a relationship with an invalid value',
data: { errors: [Array] }
}
}
Error: build command failed.
```
### Reproducible demo or steps to reproduce from a blank project
nope
Contributor guide
Research direction
Start in syncCapabilitiesForEntitlementsAsync in credentials/ios/appstore/bundleIdCapabilities.js and follow its call to updateBundleIdCapabilityAsync. Reproduce the failure with the com.apple.developer.proximity-reader.payment.acceptance entitlement and inspect the Apple capability identifiers shown in the issue. Done means capability synchronization completes without the 409 relationship error for Tap to Pay on iPhone.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- ios, typescript
- Domain
- cli, mobile
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100