使用DBDebugToolkit调试iOS应用

“从CI获得的构建数量让我们有点不知所措。 我们安装了很多版本,过了一会儿我们不太确定我们当前在设备上安装了哪个版本。 您可以在应用程序中的某个位置添加版本并生成编号吗?”

我将永远记得在nomtek的那一刻,我们的一名测试员告诉我这个问题。 那是一个大项目的开始,所以我知道迅速解决它会在将来对他们有很大帮助。 当然,这没什么大不了的,有很多方法可以实现:咨询设计师后,可以将其添加到一个屏幕中,将其添加到“设置捆绑包”甚至是应用程序图标中。 暂时,我们将其添加到了应用主屏幕上的标签之一。

但是,在此之前,我问了一个使一切与众不同的问题:“ Android团队的朋友如何解决这个问题?”。 事实证明,他们使用的库使他们可以轻松访问许多调试工具。 您只需在屏幕上向左滑动即可显示菜单。

我真的很喜欢这个主意。 我立即开始搜索现有的库,这将有助于在iOS上实现类似的功能。 令我惊讶的是,我找不到任何类似的东西。 我一直对开放源码着迷。 当时我正在等待一个值得花些空闲时间来思考的想法,所以我很兴奋并且有动力开始在自己的图书馆工作。 当我回到家时,我打开了一个空文档,并开始写下我想在那里看到的所有功能。 在许多漫长的夜晚之后,我发布了DBDebugToolkit的第一个版本。

我的目标是提供尽可能多的有用功能,同时保持安装过程的顺利。 本文将研究DBDebugToolkit可以帮助您解决的iOS开发中常见的三个常见问题。

使用服务器

如今,绝大多数应用程序都依赖于服务器提供的数据。 通常情况下,核心业务逻辑是远程执行的,但有时在测试中可以忽略它,部分原因是后端API调用的异步特性。 此外,如果服务器端与您的应用程序同时开发,则应为一些初始问题做好准备。

DBDebugToolkit提供了您的应用程序执行的所有HTTP请求的列表,甚至包括尚未收到响应的HTTP请求。 如果响应中包含图像,则可以看到持续时间,HTTP代码甚至是缩略图。 还可以过滤列表以仅包含URL中具有指定子字符串的请求。

每个请求都可以进行彻底检查。 您可以看到所有HTTP标头和主体详细信息。 正文详细信息屏幕支持文本和图像。 如果请求以错误结尾,您还将看到所有详细信息。

作为经常使用DBDebugToolkit的人,我认为请求列表是最有用的功能之一。 它使我更仔细地了解了应用程序中至关重要但又隐藏的部分,节省了检查后端API文档所需的时间,甚至还帮助发现了琐碎的问题,例如两次发送请求。

有很多工具可以向您显示应用程序发送的请求,例如Charles Proxy。 使用DBDebugToolkit进行网络调试的独特之处在于始终启用它。 当您最终重现您担心的错误并意识到即使没有连接调试器或未启用代理时,也已经为您记录了所有请求,您一定会感激不尽。

此外,一旦从服务器获取数据,DBDebugToolkit可以帮助您验证数据到底发生了什么。 它允许您浏览文件,钥匙串, UserDefaults ,Cookie甚至是Core Data。

验证布局

我将永远记住的与DBDebugToolkit有关的另一种情况是我们的设计师Michał问我是否可以帮助他使用我的库时。 设计评审通常是开发过程的一部分,尤其是在您追求像素完美的时候。 但是,在iOS上进行操作比在Android上麻烦得多,在Android上,您可以使用单独的应用在应用顶部绘制网格并查看是否正确对齐。 iOS上的沙箱无法实现。 相反,可以使用DBDebugToolkit将负责绘制网格的代码注入到您的应用程序中。 我必须承认,我感到as愧的是,起初我只是在考虑开发人员和测试人员,而没有意识到iOS环境对设计师也很苛刻。 感谢Michał在(沙)盒子外面思考!

DBDebugToolkit允许您在应用程序顶部绘制高度可定制的网格覆盖。 您可以指定覆盖图的大小,不透明度和颜色,以适合应用程序的边距和配色方案。

网格覆盖将在应用程序的开发和设计审查期间为您提供很多帮助。 它背后的故事是我最喜欢的开源方面之一的完美示例-它根据用户的需求而发展。

除了网格覆盖之外,DBDebugToolkit中还包含一项附加功能,在设计审查期间可能会有所帮助。 有一个功能强大的调试工具,称为UIDebuggingInformationOverlay。 除其他功能外,它还允许您测量视图,甚至将实现与设计进行比较。

UIDebuggingInformationOverlay 隐藏在专用API中,然后DBDebugToolkit执行显示它所需的调用。 要了解更多信息,建议您阅读Ryan Peterson的文章。 德里克·塞兰德(Derek Selander)对此进行了全面描述。

功能标记

功能标记(也称为功能切换)是一种功能强大的技术,具有许多应用程序。 您可以将它们用作保留单独的功能分支的替代方法,用于金丝雀版本或A / B测试。 本质上,它们只是在条件语句中使用的变量。

DBDebugToolkit提供了一种称为“自定义变量”的机制。 它允许您定义变量,可以在运行时在调试菜单中对其进行修改。 它是使用和测试功能标志的理想选择。

假设您正在考虑简化应用程序中的注册过程。 您还不确定它将如何影响转换率,因此您决定执行A / B测试。 您的代码必须同时支持这两个选项,并且您希望有一种在调试版本中在它们之间进行切换的方法。 您可以通过定义和添加自定义变量来实现:

  来让 simpleSigned = DBCustomVariable(name:“ Simplified Sign-up”, 
值:false)
DBDebugToolkit.add(simplifiedSignUp)

执行此代码后,打开菜单并选择“自定义变量”。 您会看到一个带有开关的布尔变量,允许您修改其值:

您可以检查变量的值,以确定应该使用哪个版本的注册过程:

 警卫  simpleSigned = DBDebugToolkit.customVariable(withName:“简化注册”)?. value  ? 布尔(Bool) 其他 { return }( 如果简化){ 
//打开注册过程的简化版本。
}其他{
//打开注册过程的标准版本。
}

就是这样! 现在,您可以轻松测试注册过程的两个版本。

此功能还允许您定义数字和字符串变量。 它为您提供了很多可能性,例如,您可以在运行时修改布局或服务器地址。


这些只是DBDebugToolkit如何改善日常工作的示例。 我强烈建议您查看功能的完整列表。

目标是尽可能地帮助iOS社区。 您可以通过为此开源项目做出贡献,或者简单地通过提供反馈或请求新功能来支持这一事业。

有什么想法吗? 在下面的评论中分享它们!