概述:
客户希望应用程序是稳定的,没有bug,并有效地使用系统资源。操作系统通过收集不同类型的日志来帮助您满足这些期望,您可以使用这些日志来诊断应用程序中的问题:
- 崩溃报告描述了应用程序是如何终止的,并记录了崩溃时在每个线程上运行的代码。
- Jetsam事件报告描述了操作系统终止应用程序时的系统内存条件。
-
设备控制台日志包含操作系统和应用程序中发生的操作的详细信息。
应用的发行版本,比如应用商店、企业环境或测试团队,都需要你使用崩溃报告和设备日志来诊断客户遇到的问题。发行版构建不包含在Xcode中调试的必要权利。
使用崩溃报告解决稳定性问题
崩溃报告是诊断问题时最常用的日志类型。当收到应用程序的崩溃报告时,使用它们来了解应用程序存在的稳定性问题。崩溃报告描述了你的应用程序是如何终止的,还包含了每个线程的完整回溯,显示了崩溃时代码的运行情况。
使用崩溃报告调试问题:
-
使用符号信息构建你的应用程序,并在发布应用程序之前保留Xcode存档。
-
检索某个问题的崩溃报告。有关获取崩溃报告的不同方法,请参阅获取崩溃报告和诊断日志。
- 将十六进制的地址转换为应用程序的符号名称,如在崩溃报告中添加可识别符号名称所述。
- 确定崩溃是否符合识别常见崩溃原因的任何模式。可以参考分析崩溃报告和检查崩溃报告中的字段来获得关于这个问题的更多信息。
- 更新代码来解决这个问题。
- 使用XCTest框架添加测试,以确保问题不会再次出现。
### 使用Jetsam事件报告发现内存低效
确保你的应用程序有效地使用内存。当iOS、iPadOS、watchOS或tvOS上的应用程序低效地使用内存时,其他应用程序可以留在后台内存中的内存就更少了。较低的可用内存限制了用户在应用程序之间切换的速度,因为应用程序无法从内存中恢复,必须先完成完整的应用程序启动。
当操作系统遇到内存不足的情况,并且需要比当前空闲内存更多的内存时,设备的操作系统可以终止应用程序以回收它们正在使用的内存。jetsam事件报告描述了操作系统终止应用程序的系统内存条件。请参见定位设备上的崩溃报告和内存日志,了解如何访问这些日志,并使用jetsam事件报告识别高端内存使用,以了解解释jetsam事件报告的信息。
Jetsam事件报告不包含应用程序中执行线程的堆栈跟踪,但它们包含有关内存使用的额外系统信息。当您的应用程序由于内存压力而崩溃时,请参阅收集有关内存使用的信息以了解您的应用程序的内存使用模式,并响应低内存警告以了解何时降低内存使用。
使用设备控制台日志诊断问题
苹果设备在内存中持续维护着操作系统和各个应用程序的操作记录。在发生问题后,可以查看这些日志。有些问题,比如安装应用程序时出现的问题,可以通过使用macOS上的Console应用程序查看操作系统日志来诊断。有关访问设备控制台日志的说明,请参阅访问设备控制台日志。
使用日志记录框架将应用程序的日志消息添加到操作系统的日志中。您提供的日志可以包含额外的分组和标记信息,以帮助从原始用户操作跟踪问题。这些信息对于诊断复杂的交互非常有用,例如调试应用程序与其某个应用扩展之间的交互。
不要在日志中包含隐私敏感信息
获取崩溃报告和诊断日志
从App Store、TestFlight或直接从设备上收集崩溃报告和设备日志。
概述
在你的应用发布给用户之后,学习如何通过收集崩溃报告和诊断日志来改进它。如果客户报告你的应用程序出现问题,请使用Xcode中的Crashes organizer获取有关该问题的报告,如如何创建报告(How are reports created?)如果崩溃管理器不包含您需要的诊断信息,或者您无法访问,客户可以从他们的设备收集日志,并直接与您共享,以解决问题。有了崩溃报告后,你可能需要在崩溃报告中添加可识别符号信息,详细信息请参见8.2.3节“在崩溃报告中添加可识别符号名称”。
对于不是崩溃的问题,检查操作系统的控制台日志,以找到诊断问题来源的重要信息。
从TestFlight和App Store收集崩溃报告
TestFlight和App Store会为你提交的每个版本的应用收集崩溃报告。如果你在向App Store提交构建时包含了符号信息,崩溃报告会自动符号化。 ReviewBuilding your app to include debugging informationfor the recommended settings.
客户发送的诊断和使用信息会显示在Crash organizer中,如“Share crash, energy, and metrics data with developers”中所述。无论用于手机上的 共享诊断和使用数据选项如何设置,您应用程序的TestFlight用户都会自动与您共享崩溃报告。如果crash organizer中没有出现crash报告,请查看organizer中是否没有crash、energy或metrics报告,以便从您的客户那里收集crash报告。
以下崩溃报告类型无法通过 Crashes organizer 获得,但可以通过其他方式获得。See Transfer Crash Reports and Device Logs To a Mac and Locate Crash Reports and Memory Logs on the Device.。
- 监视事件,比如那些应用启动时间较慢的事件
- 无效的code-signature崩溃 (签名无效的崩溃)
- 热事件,由于应用程序使用了过多的CPU,设备过热
-
Jetsam事件,用于应用程序的高内存使用
定位设备上的崩溃报告和内存日志
如果客户在您的应用程序中报告了崩溃,而您在崩溃管理器中没有针对它的崩溃报告,请让客户通过他们的设备将崩溃报告通过电子邮件发送给您。
watchOS的崩溃报告可以在配对的iPhone上看到