Add workaround for failed payments on iOS 18.2 #4610
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There's a bug introduced by Apple in iOS 18.2 which prevents the payment sheet from being displayed if the current scene's key window root view controller is not part of the view hierarchy.
This can happen if it is currently presenting a modal view controller with
modalPresentationStyle = .fullScreen
.When the issue manifests, there is a log error message printed in the console:
Could not get confirmation scene ID for
To workaround the issue we traverse the view controller hierarchy until we find the topmost one and present the payment sheet there with the new
purchase()
method introduced in iOS 18.2 which accepts aUIViewController
.IMPORTANT: The fix requires compiling with Xcode 16.2 to take effect.
Checklist
purchases-android
and hybridsMotivation
Description