I had the same accident. The Apple board will work for the first time, but on the second attempt, we would crash and could play it every time. The problem is that in the didAuthorizePayment delegate didAuthorizePayment I did all the backend processing, and when it was successful, I called the completion block with completion(PKPaymentAuthorizationStatus.Success) and then rejected the view controller.
Instead, I moved the rejection code from the didAuthorizePayment method to the 'didFinish' method (which required me to hold some state to go to the receive page). As soon as I did this, the "done" button was shown on the Apple payment controller, and the crashes disappeared.
Brandon
source share