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

咨询Firebase Performance Trace最佳放置位置及报错问题

解决Firebase Performance Trace放置的报错问题

看起来你踩了Firebase Performance的一个已知限制——它目前确实不支持在App Extensions环境中使用。你遇到的报错“Firebase Performance does not support Extensions at this time”,大概率是因为你的FirebaseUtility单例类属于Extension目标,或者你在Extension上下文里初始化了Firebase Performance。

下面给你几个可行的解决方案,帮你正确统计拉取数据的耗时:

方案1:直接在视图控制器(VC)中添加Trace

这是最直接的方式,把Trace逻辑放在调用getCards的VC代码里,围绕异步请求的生命周期来启停Trace:

// 在VC中调用getCards的地方
let fetchCardsTrace = Performance.startTrace(name: "fetch_cards_full_flow")

FirebaseUtility.shared.getCards { [weak self] result in
    // 一定要记得在请求完成后停止Trace
    fetchCardsTrace.stop()
    
    // 这里处理你的结果逻辑
    switch result {
    case .success(let cards):
        // 添加自定义属性,方便后续分析成功/失败情况
        fetchCardsTrace.setValue("success", forKey: "request_status")
        self?.updateUI(with: cards)
    case .failure(let error):
        fetchCardsTrace.setValue(error.localizedDescription, forKey: "request_status")
        // 错误处理
    }
}

方案2:调整FirebaseUtility的Target归属

如果你坚持要在FirebaseUtility里放置Trace,那要确保这个单例类属于主App目标,而不是任何Extension:

  • 打开Xcode,选中FirebaseUtility文件
  • 在右侧的File Inspector里,检查Target Membership,只勾选你的主App,取消所有Extension的勾选
  • 同时确保Firebase Performance的初始化代码(比如FirebaseApp.configure())只在主App的AppDelegate或SceneDelegate中执行,不要在Extension里调用

额外的最佳实践

  • Trace名称尽量语义化,比如cards_network_fetch或cards_data_parsing,方便在Firebase控制台快速识别
  • 如果getCards包含多个子步骤(比如网络请求、本地缓存读取、数据解析),可以给Trace添加多个自定义属性,比如trace.setValue("network", forKey: "data_source"),帮助你定位性能瓶颈
  • 务必在异步操作的所有分支(成功/失败/超时)都调用stop(),避免Trace一直处于活跃状态无法上报

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:04:34