停止折磨 Xcode,开始享受 DebugSwift
听起来很熟悉:你在远离电脑的物理设备上测试应用,突然——一个 bug 出现了。或者网络请求返回了 500,但你看不到错误体。你必须回到电脑前,插上数据线,启动 Xcode,然后尝试重现问题。如果这是一个偶发的 bug 呢?在这样的时刻,你多希望口袋里就有一个开发者控制台。
今天我们来深入了解 DebugSwift——一个强大的工具包,可以将你的 iOS 应用变成一个完整的调试实验室。它不仅仅是"另一个日志工具",而是一个综合性工具,让你可以直接访问运行中的应用中的网络请求、视图层级,甚至数据库。

什么是 DebugSwift 以及为什么你需要它
DebugSwift 是一个面向 Swift 开发者的开源库,它将一个隐藏的调试菜单嵌入到你的应用中。可以把它想象成 iOS 版的 Chrome DevTools。该项目借鉴了 CocoaDebug 和 DBDebugToolkit 等工具的最佳理念,但专注于现代 Swift 6 和原生 Apple Silicon 支持。
这里的主要亮点是自主性。你可以给测试人员或客户一个构建版本,如果出现问题,他们可以自己检查日志、检查网络流量,甚至截取屏幕层级截图——无需你的帮助。
将 DebugSwift 添加到项目的五个理由
1. 增强版网络检查器
流量监控是基础。DebugSwift 拦截所有 HTTP 请求和响应,美观地格式化 JSON,并高亮语法。但还有一些"杀手级功能":
- WebSocket 检查器:自动追踪帧,无需额外配置。
- 实时解密:如果你的后端传输加密数据(AES-256/128),你可以在 DebugSwift 中注册密钥,检查器会显示明文。
- 过滤功能:你可以隐藏分析请求,以免日志杂乱。

2. 可视化界面审计
有时候你需要理解为什么一个视图偏移了几个像素。DebugSwift 内置了一个 3D 层级检查器(类似于 Xcode 中的那个,但可以直接在应用内使用)。
- 网格叠加:叠加网格以检查对齐。
- 慢速动画:减慢动画速度以检查每个过渡帧。
- SwiftUI 渲染追踪:一个实验性功能,高亮显示重新渲染的 SwiftUI 组件。这对性能优化非常有价值。

3. 内存泄漏追踪
闭包中忘记使用 strong reference——经典问题。DebugSwift 实时监控 ViewControllers 和 Views。如果一个对象本应从内存中移除但仍然存在,工具会发出警报。还有一个性能小部件,可以在你界面上叠加显示 FPS、CPU 负载和内存使用情况。
4. 访问应用内部
再也不用写 print(UserDefaults.standard.dictionaryRepresentation()) 了。在资源部分,你可以:
- 查看和编辑
UserDefaults和Keychain。 - 浏览沙盒和 App Groups 中的文件。
- 检查 SQLite 和 Realm 数据库。
- 一键复制 APNS token(我们在这上面节省了多少时间啊!)。
5. 自定义操作
这是我最喜欢的部分。你可以在调试菜单中添加自己的按钮。例如:"清除缓存"、"切换服务器到开发/预发布",或"用测试产品填充购物车"。
DebugSwift 将你的 iOS 应用变成一个完整的调试实验室,具备网络检查、视图层级、内存泄漏检测等功能——直接在设备上运行。
底层原理
该项目使用 Swift 编写,需要 iOS 14+。有趣的是,开发者非常注重 Apple Silicon 支持。如果你曾经在 M1/M2 芯片的 Xcode 模拟器上遇到过架构错误,你可以在这里忘掉它——该库作为标准的 XCFramework 发布。
对于网络流量拦截,它使用 URLSession 日志记录。如果你提前创建会话配置,DebugSwift 提供了便捷的方法来注入你自己的协议:
DebugSwift 是一款强大的开源 iOS 调试工具包,提供网络检查、视图层级、内存泄漏检测和自定义操作功能。
实际使用案例
案例 #1:远程测试。 你向测试人员发送一个 TestFlight 构建版本。他们在折扣逻辑中发现了 bug。测试人员无需通过 Mac 控制台请求日志,而是简单地摇晃手机(摇晃切换),打开 DebugSwift,进入网络日志,然后给你发送服务器 JSON 响应的截图。
案例 #2:推送调试。 你需要测试应用如何处理特定的推送通知负载。DebugSwift 有一个推送模拟器:你只需粘贴 JSON,应用就会像收到来自 Apple 的推送一样处理它。

如何开始使用
通过 Swift Package Manager 或 CocoaPods 安装非常简单。在 AppDelegate 中,只需几行代码:
DebugSwift 将你的 iOS 应用变成一个完整的调试实验室,具备网络检查、视图层级、内存泄漏检测等功能——直接在设备上运行。
提示:始终将调用包装在 #if DEBUG 中,以确保调试工具不会意外进入 App Store。
结论:值得一试吗?
如果你厌倦了无休止的 print() 和仅仅为了检查数据库中的值或请求头而不断重新构建项目——那绝对值得一试。DebugSwift 节省了大量时间,特别是在活跃开发和 API 集成期间。
该项目正在积极开发中,社区活跃,Swift 6 支持表明该工具将在很长一段时间内保持相关性。
立即试用项目:https://github.com/DebugSwift/DebugSwift
你使用哪些调试工具?在评论中分享吧!
相关项目