在接收速率时将iPad更新为iPadOS 15,并在其上按下“检查对话框”并按下“取消”,应用程序就会冻结。这是在真实的iPads和iPad模拟器上复制的。使用Xcode 12制作并安装在iPadOS 15上的构建甚至可以重复使用。
我用这段代码显示弹出的内容:
if #available(iOS 14.0, *) {
if let scene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}
}
else {
SKStoreReviewController.requestReview()
}我检查了在DispatchQueue.main.asyncAfter中运行的任何代码,它都能工作,所以看起来这个应用程序不会只对用户的触摸做出反应。我认为它可能在整个应用程序上留下了任何一种覆盖。
有没有人对如何解决这个问题有任何想法?
发布于 2022-03-27 04:06:46
最后,我找到了秘密
如果重写CocoaDebug.
如果使用CocoaDebug+Extensions.swift,则可以看到此重写代码位于CocoaDebug中。
open override var canBecomeFirstResponder: Bool {
return true
}当requestReview在iOS 15+中为苹果服务时,就像这样:
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];
}对于iOS 15+,应用程序可以在审查视图上感知用户的交互,并创建其窗口(SkstoreReViewPresentationWindow) keyWindow,而应用程序在iOS 15之前没有被感知到。
因此,在iOS 15.0+中,单击Review后,CocoaDebug中的重写代码将使其窗口在成为keyWindow后成为第一个响应程序。
这使得下面的窗口永远不是响应程序,所以屏幕就会冻结,因为SkstoreReViewPresentationWindow的大小是全屏。
您还可以在CocoaDebug Github:https://github.com/CocoaDebug/CocoaDebug/issues/143中跟踪这个问题。
https://stackoverflow.com/questions/69272004
复制相似问题