如何在macOS SwiftUI应用中使用SKStoreReviewController请求评分?
在macOS 12及以下SwiftUI应用中触发App Store评分弹窗的解决方案
一、调试模式无反应的原因
Xcode调试运行时,SKStoreReviewController.requestReview()不会弹出评分对话框——这是苹果的机制限制,只有通过TestFlight分发的测试版本或App Store正式上架的应用,才能正常触发评分弹窗。
二、macOS 12及以下的适配实现
macOS 12没有requestReview(in:)(仅iOS/macCatalyst可用),但直接调用SKStoreReviewController.requestReview()即可,核心是确保在主线程调用,并选择合适的触发时机:
- 导入StoreKit框架:
import StoreKit
- 在用户交互触发的事件中调用(比如按钮点击、完成指定操作后):
Button("给应用评分") { DispatchQueue.main.async { SKStoreReviewController.requestReview() } }
三、版本兼容写法(适配macOS 12+)
如果需要同时兼容macOS 13及以上的新SwiftUI API,可以做版本判断:
import StoreKit struct ContentView: View { @Environment(\.requestReview) private var requestReview var body: some View { Button("请求评分") { if #available(macOS 13.0, *) { requestReview() } else { DispatchQueue.main.async { SKStoreReviewController.requestReview() } } } } }
关键注意事项
- 苹果对评分弹窗有调用频率限制:用户1年内最多只会看到3次弹窗,无论代码调用多少次,所以不要在应用启动等高频场景触发。
- 应用的Bundle ID必须与App Store后台的应用记录完全一致,否则TestFlight或正式版也无法弹出弹窗。
内容的提问来源于stack exchange,提问作者NFC.cool
相关产品推荐
相关产品推荐

