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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 02:25:16