iPadOS 15 上的成交率和评论冻结界面

问题描述 投票:0回答:2

将 iPad 更新到 iPadOS 15 后,在收到“评分和评论”对话框并按“取消”时,应用程序冻结。这是在真实的 iPad 和 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
中的任何代码并且它有效,所以看起来该应用程序不仅仅对用户的触摸做出反应。我想也许它在所有应用程序上留下了任何类型的覆盖。

有人对如何解决这个问题有任何想法吗?

ios swift xcode ipad ios15
2个回答
1
投票

终于,我找到了秘密

  1. 检查您是否使用CocoaDebug。
  2. 检查是否重写 canBecomeFirstResponder 方法。

如果你使用CocoaDebug,你可以看到这个覆盖代码位于CocoaDebug+Extensions.swift

open override var canBecomeFirstResponder: Bool { 
    return true 
}

在 iOS 15+ 中对 Apple 进行 requestReview 时,如下所示:

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+,App 可以感知用户在 Review View 上的交互,并使其窗口 (

SkstoreReViewPresentationWindow
) keyWindow,而 iOS 15 之前 App 无法感知。

因此,在 iOS 15.0+ 中,单击 Review View 后,CocoaDebug 中的覆盖代码将使其 Window 成为 keyWindow 后第一个响应者

这会导致下面的窗口永远不会响应,因此屏幕冻结,因为
SkstoreReViewPresentationWindow
的大小是 全屏


您也可以在 CocoaDebug Github 中关注问题:https://github.com/CocoaDebug/CocoaDebug/issues/143


0
投票

对于任何面临此问题但不使用 CocoaDebug 的人。

另一个问题可能是您以某种方式持有对

SKStoreReviewPresentationWindow
的引用。如果您在某些代码中观察到
didBecomeKeyNotification
并保留对通知或其对象的引用(实际上是
SKStoreReviewPresentationWindow
),就会发生这种情况。

这成为一个问题,因为

SKStoreReviewPresentationWindow
会将您的窗口设置为释放时的关键。如果它没有被释放,它永远不会放弃密钥,并且您的窗口将变得无响应。

© www.soinside.com 2019 - 2024. All rights reserved.