I am building CardNeuro, an iOS app that uses GPS to detect the nearest merchant and recommends the highest-earning credit card in the user's wallet at point of sale.
Current flow:
- GPS detects merchant
- App recommends best card (e.g. Amex Gold for dining, Amazon Visa for groceries)
- User taps — Apple Wallet opens
- User has to scroll to find the right card
The problem: Apple Wallet opens to the last used card, not the card we recommended. The user still has to find it manually.
What I want to do:
Open Apple Wallet directly to a specific payment pass so the recommended card is shown immediately and the user can double-click to pay with no extra steps.
What I found in the docs:
PKPassLibrary exposes a passURL property on payment passes:
let passLib = PKPassLibrary() let walletURL = passLib .passes(of: .payment) .first(where: { $0.localizedName == "Amex Gold" })? .passURL
if let url = walletURL { UIApplication.shared.open(url) }
My questions:
-
Does PKPassLibrary.passes(of: .payment) return cards added natively to Apple Wallet by the user — or only passes provisioned by my own app?
-
Is opening passURL via UIApplication.shared.open() permitted for third party apps that did not provision the pass?
-
Is a special entitlement required to read payment passes from PKPassLibrary that belong to other apps or were added natively?
-
If deep linking to a specific payment pass is not available to third party apps — is there any recommended API or UX pattern for surfacing a specific card to the user before they tap to pay?
Any guidance from the team appreciated.