You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何针对iOS15.x模拟器禁用SKStoreReviewController请求代码?

解决方案:结合模拟器环境与iOS版本禁用评分请求代码

你的核心需求是避免SKStoreReviewController.requestReview(in: scene)在iOS 15.x模拟器中执行(因卡顿问题),其他场景正常调用。下面是两种可行的实现方式:

1. 直接合并判断逻辑(简洁写法)

可以把模拟器环境判断和版本判断合并成一个条件,代码更紧凑:

// 非模拟器,或是模拟器且iOS版本≥16时,才触发评分请求
if !targetEnvironment(simulator) || #available(iOS 16, *) {
    SKStoreReviewController.requestReview(in: scene)
}

这里targetEnvironment(simulator)是编译期宏,会在编译阶段就处理模拟器/真机的分支;#available是运行期版本判断,两者结合能精准跳过iOS15.x模拟器的情况。

2. 封装成工具方法(便于复用)

如果需要在多个页面调用评分请求,建议封装成扩展方法,把判断逻辑统一管理:

import StoreKit
import UIKit

extension SKStoreReviewController {
    static func safeRequestReview(in scene: UIWindowScene) {
        #if targetEnvironment(simulator)
            // 模拟器下仅iOS16及以上版本才执行
            guard #available(iOS 16, *) else { return }
        #endif
        requestReview(in: scene)
    }
}

之后调用时只需一行代码:

SKStoreReviewController.safeRequestReview(in: scene)

后续如果需要调整版本或环境规则,只需要修改这个扩展方法即可,不用逐个修改调用点。

关于你当前代码的说明

你当前的代码逻辑(模拟器下仅iOS16+调用,非模拟器直接调用)其实已经满足需求,但通过上面的方式可以优化得更简洁、更易于维护。

内容的提问来源于stack exchange,提问作者Gargo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 16:15:04