将出色的日志带到您的iOS应用中📝

随着iOS SDK的每次迭代,应用程序变得越来越复杂。 几年前,标准应用程序只需要处理网络呼叫,也许还可以处理一些GPS或加速度计数据。 现在,它有望处理生物特征认证,增强现实,多种类型和大小的设备,并且清单还在继续。

在这种复杂的情况下,同样会出现复杂的问题,并且很难理解和调试。 因此,对于开发人员而言,提供尽可能多的日志记录信息变得至关重要,因为当出现问题时,这些日志将提供宝贵的帮助。

如果您仍在使用print()函数将消息记录到控制台,那么您会感到很惊讶:自iOS 10起,只有在将调试器附加到应用程序后,您的日志才可用。 如果您生成AdHoc或InHouse版本,并尝试使用Xcode的“设备”面板或macOS应用程序“控制台”查看日志,那么将找不到它们。

这是iOS 10引入了一组新的日志记录API的结果。

好消息是,这个新的API允许对日志进行更精确的控制,同时采用起来也相当简单。

首先,让我们看一下使用新API的等效print("Hello World!")

很棒的是,在消息之前已添加了一个类别标签,这使得对特定消息进行过滤非常容易:

现在,假设您已经进行了一些AdHoc或InHouse构建以进行质量检查,并且您需要从中检索应用程序的日志,以便了解造成此问题的原因。

当您打开Console.app并开始与您的应用进行交互时,您会看到日志确实存在,但是它们却在非常密集的信息流中丢失了:

为了隔离它们,我们可以基于应用程序的名称来设置过滤器:

更进一步,可以为类别定义过滤器:

本文旨在对新的日志记录API进行介绍。 我已经介绍了最有可能为任何应用带来价值的功能,但是还有更多可用的功能,因此,我仅敦促您查看Apple提供的用于学习所有高级用例的资源:

  • API的文档:https://developer.apple.com/documentation/os/logging
  • 来自2016 WWDC的视频:https://developer.apple.com/videos/play/wwdc2016/721/
  • 演示项目:https://developer.apple.com/library/content/samplecode/Logging/Introduction/Intro.html

最初发布在 gist.github.com上