调试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
相关产品推荐
相关产品推荐

