You need to enable JavaScript to run this app. 调试SwiftUI应用时如何可视化查看当前FPS(帧率)
优惠活动
大模型
产品
解决方案
定价
更多

调试SwiftUI应用时如何可视化查看当前FPS(帧率)

SwiftUI应用调试时显示FPS的三种可行方案

方法1:Xcode内置渲染性能指示器(无需写代码,最快实现)

这是最便捷的原生方案,完全适配SwiftUI场景:

  • 连接真机(优先)或启动模拟器,运行你的SwiftUI项目
  • 点击Xcode顶部菜单栏 Debug → Debug Workflow → View Debugging → 勾选 Show Rendering Performance
  • 此时设备/模拟器屏幕顶部会悬浮显示全局FPS、GPU利用率等核心参数,滚动图表时可以直接查看实时帧率变化

方法2:自定义SwiftUI悬浮FPS组件(可集成到调试界面)

如果需要把FPS监控常驻到应用内部调试层,可以自己实现轻量监控组件:

第一步:实现FPS监控类

import SwiftUI
import QuartzCore

class FPSMonitor: ObservableObject {
    @Published var currentFPS: Int = 0
    private var displayLink: CADisplayLink?
    private var lastTimestamp: CFTimeInterval = 0
    private var frameCount: Int = 0
    
    init() {
        displayLink = CADisplayLink(target: self, selector: #selector(updateFrameCount(link:)))
        displayLink?.add(to: .main, forMode: .common)
    }
    
    @objc private func updateFrameCount(link: CADisplayLink) {
        if lastTimestamp == 0 {
            lastTimestamp = link.timestamp
            return
        }
        frameCount += 1
        let timeDelta = link.timestamp - lastTimestamp
        guard timeDelta >= 1 else { return }
        currentFPS = frameCount
        frameCount = 0
        lastTimestamp = link.timestamp
    }
    
    deinit {
        displayLink?.invalidate()
    }
}

第二步:实现悬浮FPS指示器

struct FPSIndicator: View {
    @StateObject private var monitor = FPSMonitor()
    var body: some View {
        Text("\(monitor.currentFPS) FPS")
            .font(.system(size: 12, weight: .semibold))
            .foregroundColor(.white)
            .padding(.horizontal, 6)
            .padding(.vertical, 2)
            .background(.red.opacity(0.7))
            .cornerRadius(4)
            .padding(.trailing, 8)
            .padding(.top, 4)
            .allowsHitTesting(false) // 不拦截下层视图的交互事件
    }
}

第三步:全局挂载组件

仅在DEBUG模式下生效,发布版本会自动移除:

@main
struct YourChartApp: App {
    var body: some Scene {
        WindowGroup {
            // 你的原有根视图
            ChartRootView()
            #if DEBUG
            .overlay(alignment: .topTrailing) {
                FPSIndicator()
            }
            #endif
        }
    }
}

方法3:Instruments Core Animation工具(深度性能分析用)

你之前没找到对应工具是选择了错误的模板,正确操作步骤:

  • 点击Xcode顶部菜单栏 Product → Profile 启动Instruments
  • 在模板选择页选择 Core Animation 模板,点击启动
  • 操作应用滚动图表的同时录制性能数据,时间线面板中的 Core Animation FPS 曲线就是对应操作的实时帧率,可以精准定位具体哪个滚动节点出现掉帧。

注意:模拟器的FPS数据偏差较大,所有性能测试建议优先使用真机,得到的结果才是用户实际体验的真实值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 14:36:04