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
相关产品推荐
相关产品推荐

