When performing simulator in-app purchase testing from Xcode, the purchase flow is canceled before the purchase sheet pops up in the simulator. Then, the macOS crash reporter pops up and indicates a crash in a service called PassbookServiceUI!
Here’s what it looks like:
In addition, if you inspect the error responses from StoreKit you’ll see messages like this:
SKPaymentQueue: Payment completed with error: Error Domain=ASDErrorDomain Code=907 "Unhandled exception" UserInfo={NSUnderlyingError=0x60000009e5b0 {Error Domain=AMSErrorDomain Code=6 "Payment Sheet Failed" UserInfo={NSLocalizedDescription=Payment Sheet Failed,
The crash is in a service called PassbookServiceUI, which sounds like it has nothing to do with in-app purchases. Unfortunately, it makes it impossible to perform Xcode StoreKit purchase testing.
This occurs when triggering purchases with either StoreKit 1 or StoreKit 2 APIs. It happens even if a valid StoreKit Configuration file (.storekit) file is assigned to the build target.
The Crash Environment
The PassbookServiceUI crash occurs with the following environment as of this writing:
- macOS 13.0 Ventura
- Xcode 14.0.1
- Simulators iPhone 14 Pro running iOS 16
- App code utilizing either StoreKit 1 or StoreKit 2 APIs
- A valid StoreKit Configuration file
Solutions to the PassbookServiceUI crash
This error can be resolved by altering the simulator device, as many are known to function correctly.
- For iOS 16 testing - Use iPhone 14, iPhone 14 Plus, or iPhone 14 Pro Max.
- For iPhone 14 Pro form factor testing - Use iPhone 13 Pro (with either iOS 15 or iOS 16)
That’s it! While this is an annoying bug that hopefully Apple fixes in a future version of Xcode, the workaround is quite simple.
Level Up Your App Revenue
Nami is a complete solution for growing your app revenue. Here’s what we have to offer:
- A proven StoreKit implementation, covering all tricky edge cases
- An easy to adopt SDK, no server-side code is required
- Built-in no-code paywall templates, A/B testing, and analytics
- Our generous free tier provides reasonable limits and lots of features not found in homegrown implementations.
Now you can focus on building a great app experience that is built for generating revenue. Get started for free here.