iOS 15 - App freezes/stuck SKStoreReviewController

App is freezing/stuck when user taps on "Not Now" alert action of native StoreReviewController.

The issue is on iOS 15.0.2, App works perfectly fine in lower versions (iOS 14.4)

We used following code, to collect user review, also tried keeping this line on code in main thread, but no luck.        

SKStoreReviewController.requestReview(in: scene)

Is there anything we could do to fix? Thanks in advance!

My app is seeing this too. "Not Now" response worked perfectly fine in ios 14 flavors. With ios 15, it seems to lock the UI layer.
Have you had any luck isolating the cause yet?

I'm still getting this, did you manage to find any answer as to why this was happening anywhere else, or manage to find a fix yourself?

Some hint: Click the Pause button when App freezed, and print the keyWindow and App original window at this time:

If I call [[[[UIApplication sharedApplication] delegate] window] makeKeyAndVisible]; after some time, App would not freeze any more. But this is definitely not a good solution.

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    [[[[UIApplication sharedApplication] delegate] window] makeKeyAndVisible];
  });

Finally, I found the Secret:

  1. Check if you use CocoaDebug.
  2. Check if you override the canBecomeFirstResponder method.

if you use CocoaDebug, you can see this override code is in CocoaDebug+Extensions.swift:

open override var canBecomeFirstResponder: Bool { 
    return true 
}

And when requestReview for Apple in iOS 15+, like this:

if (@available(iOS 14.0, *)) {
    UIWindowScene *activeScene;
    NSSet<UIScene *> *scenes = [[UIApplication sharedApplication] connectedScenes];
    for (UIScene *scene in scenes) {
        if ([scene activationState] == UISceneActivationStateForegroundActive) {
            activeScene = (UIWindowScene *)scene;
            break;
        }
    }
    if (activeScene != nil) {
      [SKStoreReviewController requestReviewInScene:activeScene];
    }
} else if (@available(iOS 10.3, *)) {
    [SKStoreReviewController requestReview];
}

For iOS 15+, App can perceive the user's interaction on the Review View and make its window (SkstoreReViewPresentationWindow) keyWindow, while App is not perceived before iOS 15.

So in iOS 15.0+, after Clicking on the Review View, the override code in CocoaDebug would make its Window the FIRST responder after becoming the keyWindow.

That causes the windows below never be a responder, so the screen freezes, because the size of SkstoreReViewPresentationWindow is FULL screen.


You can also follow the issue in CocoaDebug Github: https://github.com/CocoaDebug/CocoaDebug/issues/143

iOS 15 - App freezes/stuck SKStoreReviewController
 
 
Q