We're working on in-app provisioning for wallet access passes. When testing the in-app provisioning on a sandbox account, I get an error saying software update required. Please advise.
Hi @yoyoismycat,
You wrote:
We're working on in-app provisioning for wallet access passes. When testing the in-app provisioning on a sandbox account, I get an error saying software update required. [...]
The most common cause for this error is due to the devices OS version being below the minimum requirements.
To use PKAddSecureElementPassViewController, you need iOS 13.4 or later. For Wallet Access passes, you need iOS 15 or later. For PKAddShareablePassConfiguration or must-pass provisioning in a single sheet, you need iOS 16 or later. For Access passes with PKSecureElementPassActiviationState, you need iOS 16.4.
Confirm the exact iOS version of your test device. If you are testing on Simulator, note tat the Secure Element provisioning is not supported and will always fail. You must test on a physical device.
Since you only receive this error in the sandbox, this may likely be related to a Pass Type ID or certificate mismatch.
In the sandbox environment, Apple users a separate certificate hierarchy. Your Pass Type ID certificate registered in the sandbox much match the one embedded in the pass configuration you are sending to PKAddSecureElementPassViewController.
Please confirm the following:
- The Pass Type ID is registered under the sandbox and production environments.
- The certificate for that Pass Type ID is not expired.
- The
passTypeIdentifierin your configuration exactly matches the registered ID, including case sensitivity.
Lastly, confirm your PKAddSecureElementPassConfiguration is populated correctly. If any field is missing or malformed, PassKit's local validation can emit this error instead of a more specific one.
let config = PKAddSecureElementPassConfiguration()
config.primaryAccountIdentifier = "your-account-id" // must not be empty
config.primaryAccountSuffix = "••••1234" // user-visible, must not be nil
config.cardholderName = "Tom Clark"
config.localizedDescription = "Your Access Pass"
// If you use activation data, it must be base64url-encoded, not standard base64
config.activationData = Data(...) // verify encoding
Note: A nil primaryAccountIdentifier or malformed activationData will fail locally before any network call and surfaces as this same error.
Cheers,
Paris X Pinkney | WWDR | DTS Engineer