Finally, I found the Secret:
- Check if you use CocoaDebug.
- 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.
You can also follow the issue in CocoaDebug Github: https://github.com/CocoaDebug/CocoaDebug/issues/143