iOS16中使用Apple官方代码请求App评论时Xcode警告求助
解决App Store评论请求的警告与iOS版本兼容问题
一、消除"No async operations occur within the await expression"警告
你遇到的警告是因为requestReview()虽被标记为async,但实际无异步操作逻辑,Xcode会因此触发警告。可以通过以下方式解决:
把原代码里的await requestReview()改成在MainActor.run中同步调用,既规避警告,又确保评论请求在主线程执行(UI操作必须在主线程):
@Environment(\.requestReview) private var requestReview private func presentReview() { Task { try await Task.sleep(for: .seconds(2)) // 改用MainActor.run包裹同步调用 await MainActor.run { requestReview() } } }
二、兼容iOS 15及更早版本
官方的@Environment(\.requestReview)仅支持iOS 16+,要兼容旧版本,需结合旧的SKStoreReviewController API做版本判断:
首先导入StoreKit框架,再编写兼容代码:
import StoreKit struct YourView: View { @Environment(\.requestReview) private var requestReview // iOS 16+专用 private func presentReview() { Task { try await Task.sleep(for: .seconds(2)) if #available(iOS 16.0, *) { await MainActor.run { requestReview() } } else { // iOS 15及以下用旧API,确保在主线程执行 DispatchQueue.main.async { SKStoreReviewController.requestReview() } } } } }
补充说明
Apple把requestReview()标记为async可能是为了API设计的一致性,但内部实际是同步逻辑,因此Xcode会触发警告。上述修改不会影响功能,同时解决了警告和版本兼容问题。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

