大多数浏览器和
Developer App 均支持流媒体播放。
-
诊断 app 中的功能和性能衰退
快速了解在查看功能和性能衰退数据时如何确定优先级。了解如何跟踪因特定于设备和百分比的信息而退化的指标,以便您将精力集中在优化上并节省宝贵的开发时间。我们还将展示如何在您的 app 中追踪耗尽设备存储空间的常见反面模式,帮助您自定义工作流程,并添加 App Store Connect API 以帮助您及时了解您 app 的实际性能。
资源
- Analyzing the performance of your shipping app
- App Store Connect API
- Measuring App Performance
- MetricKit
- Reducing terminations in your app
相关视频
WWDC22
WWDC21
WWDC20
-
下载
嗨 我是索尼亚 我是性能工具工程师 今天 我和我的同事史瑞亚斯 将向你们展示如何诊断 app中的 电源和性能退化 每一年 你都在努力发布 尽可能最好的app 你想让用户在你的app中 获得美妙的体验 这就是为什么优化功能 和性能如此重要的原因 本次演讲将涵盖影响app性能的 关键指标 帮助你发现退化的工具 帮助你减少磁盘写入的观点 以及自动化性能工作流的API 为了帮助你优化性能 你可以通过Xcode Organizer 和App Store Connect API 获得一套全面的指标和诊断 无需对你的app进行任何更改 如你所知 性能是不容易优化的 有这么多可用的指标和诊断 很容易迷失在信息的海洋中 你希望每个版本都比上一个版本更好 但需要一种快速的方法 来总结你的性能优先级 Xcode Organizer是了解性能的 绝佳工具 它目前搜集七个指标类别的数据 包括电池、启动、无响应、内存 磁盘写入、滚动故障和终止 要处理的信息太多了 接下来让我们深入了解 Xcode Organizer 并诊断性能退化 我从查看我的app的不同参数开始 我可以从左侧导航栏上的 七个指标类别中进行选择 某些类别 如电池和终止 可以有多个部分 以及详细说明 不同事件类型的子类别 我可以选择数十种不同的 设备类型 以及我的app的 顶级和典型用户的百分比 Organizer的中间 显示一个包含最近16个版本的 数据图表 在本例中 我想调查 我的app中的终止
屏幕上的图表显示 最新版本中的终止数量显著增加 表明该版本可能存在问题 特别是有许多法指令退出 会以蓝色强调显示 有如此丰富而有趣的一组指标 可供我了解该领域的性能 但有如此多的设备选项、指标类别 和子类别 我不清楚 应该从哪里开始优化性能 这就是为什么现在在organizer中 有一个观点部分来突出 你所有性能优先级 并简化你的工作流程 Xcode Organizer 现在处理指标数据 并识别有趣的趋势 例如性能退化 在我深入讨论之前 让我们先谈谈 什么是性能退化 以及如何检测退化 当app在电源或性能方面 相对于最近的几个版本 表现不佳时 就叫做出现退化 例如 某个版本发布后 启动需要更长的时间 在本例中 对最近发布的指标 进行分析 以确定 该值是否呈上升趋势 然后将最近几个版本的指标取平均值 并与最新值进行比较 如果指标呈上升趋势并且最新值高于 最近几个版本的平均值 则将其标记为退化 并在观点部分进行总结 在这个例子中 app平均需要 1.1秒就能启动 然而在上一个最新版本中 突然跃升到2.5秒 导致它被标记为 退化 现在你已经知道如何标记退化 让我们回到organizer 并深入研究几个范例 这是退化标签页 这是一个一站式商店 你可以在其中发现 你的最高性能优先级 你的app在最近发布后 是否突然崩溃? 那个很酷的新相机功能 会耗尽设备电池吗? 你将在观点部分 找到这些问题的答案以及更多内容 你需要的所有数据都会在此 强调显示 以了解 该领域的性能 在这里 你可以发现 不同的指标类别和子类别 在不同设备上 针对组合在一起的 典型和最高百分比 左侧边栏将概述 退化的指标、退化的程度 和百分比 强调你需要关注的内容 以创造更好的app 我的app在终止、内存 和磁盘写入方面有几个退化 接下来 我将为每一个通过一个范例 来解释它们 我会从终止退化开始 在我进行终止之前 请查看 《为什么我的app被终止了?》视频 以了解更多内容 每个退化都会总结 我最新app版本中的所有主要问题 顶部的部分显示了非法指令 导致崩溃 当我的app 访问无效的函数指针时 可能会发生这种情况 再往下看 有一张我的app 最近四个版本的非法指令退出的图表 图表顶部显示受影响的 百分比和设备 在这种情况下 所有iPhone上的 排名前1%的用户在最新版本中 遇到了更多的崩溃 平均和最新的非法指令退出次数 显示在图表右侧 在这种情况下 我的app在最新版本中 每十天就会崩溃一次 屏幕终止是非常具有破坏性的 因为用户必须频繁返回主屏幕 并重新启动app 我想删除对导致这些崩溃的 无效函数指针的引用 并可以通过查看 我的崩溃诊断进一步深入研究 查看《使用Xcode 对TestFlight崩溃进行分类》视频 以了解有关崩溃诊断的更多信息
通过退化和崩溃诊断 我现在知道我需要 在下一个app版本中减少屏幕终止 我不想停留在屏幕上的终止处 并知道还有更多我可以做的 我将检查我的app的退化来发现 其他需要改进的地方
看起来任务超时也有退化 有些指标可以针对多个设备 和百分比进行退化 在这种情况下 所有iPhone的典型 和最高百分比的任务超时都增加了 我可以滚动右侧的每个退化 查看最近版本的数据 以及指标的最新值 和平均值 当app切换到后台时 在系统终止它们之前 它们有三十秒的时间来执行任务 这意味着如果你不能恰当地 结束后台任务 可能会导致你的app更频繁地终止 从而导致下次用户切换回来时 启动缓慢 我的app现在每三天 就会在后台被终止一次 虽然不像屏幕终止那样具有破坏性 但后台终止可能更为常见 拥有无缝的启动体验是必要的 即使我的app在后台终止也是如此 我可以整合UIKit的状态恢复功能 以确保从任何后台退出时顺利恢复 最后 回到我的app的退化 还有一个性能领域 我需要关注 磁盘写入在上一个版本中 增加了28% 但还不清楚是什么导致了这个问题 知道存在性能问题是很好 但在优化我的app之前 我需要更深入地了解从哪里开始 接下来 史瑞亚斯将告诉你 如何发现磁盘写入退化的主要原因
谢谢 索尼亚 嗨 我是史瑞亚斯 我是Apple的一名存储软件工程师 我将介绍如何除错磁盘写入退化 并保持app的性能 但在深入研究这个问题之前 为什么磁盘写入如此重要? 存储与CPU和内存一样 是一种有限的资源 未经检查的磁盘写入可能会磨损 并损坏底层设备 它们也是烦人的屏幕无响应 和用户界面设计故障的常见原因 如果我们不小心 它们会很快耗尽电池寿命 这些使优化磁盘写入 成为确保出色用户体验的 关键组成部分 记住这一点 让我们了解 诊断高磁盘写入的资源 Xcode Organizer中的 磁盘写入报告窗格 是一个很好的起点 这些报告是从同意共享app分析的 设备搜集的 它们包含有关 导致写入的堆栈追踪的信息 每个报告的堆栈追踪被分解为 多个签名 并对所有报告中的签名 进行写入追踪 在此报告列表中 根据总写谅 对签名进行排序 对于每个签名 我们可以找到详细的堆栈追踪 显示写入的原因 我们还可以找到有关 收到的日志数量 OS版本和硬件模型 故障的统计信息等等 要找出有问题的地方 请密切注意你最常用的签名 在本例中 最常用的签名 负责67%的写入 我们可以从调用堆栈中推断 这是由于SQLite函数造成的 很多时候 知道问题的根源 对解决问题大有帮助 但通常 就像在这种情况下一样 解决办法可能并不明显 这里的代码对我的新功能至关重要 我没有发现任何明显的错误 也不清楚我的下一步应该是什么 事实证明 如果你知道在哪里查看 那么答案就在堆栈追踪中 有一些函数通常在堆栈深处 有时在你正在使用的库中 它们可以告诉你哪里出了问题 并通过足够的研究 可以告诉你如何修复 但这可能非常棘手 它通常需要特定的领域知识 并且非常耗时 为了节省你的精力 在Xcode13中 organizer新增了一个 名为“观点”的领域 在后台使用已知的反模式维护存储库 这些反模式会导致大量磁盘写入操作 收到报告后 会扫描报告 以查找指示这些反模式的函数 当出现匹配时 会在此处强调显示问题 以及解决问题的 优化建议 这将很容易减少app的写入 并提高性能 同时节省大量除错工作 例如 对于我们的最常使用的签名 我看到了新增索引的优化建议 还有一个指向文档页面的连结 该页面将详细解释问题 并提供除错和修复问题的步骤 太好了 现在 让我们按照建议 看看是否有帮助 为了做到这一点 让我启动文件活动工具 文件活动工具是除错 所有存储相关问题的绝佳资源 它为我提供了app执行的 所有读取和写入的详细分类 这是验证我修复的完美工具
之前 这些仪器显示了 大约为180兆字节的 临时文件的写入
这也引入了780毫秒的延迟
现在 在索引之后 由于该函数的写入量降至零 这是因为SQLite现在效率更高了 这代表不再有780毫秒的延迟 拖慢我们的速度 SQLite索引就是一个例子 还有许多其他优化建议 可以提高你的app的性能 并且我们一直在努力扩展这一列表 所以不能看看有关你的app的观点
让我们回到观点窗格 我们的app有三个退化 我们仔细检查了其中的每一个问题 并且发现了 解决所有问题的可用资源 太棒了 Xcode Organizer中 有大量的功能和性能分析 观点应该是 发现app性能优先级的 首选面板 充分利用它 计划定期检查退化和观点 并且一定要在每次发布后进行 除了Xcode Organizer 还有另一种方式可以访问 今天涵盖的所有分析 那就是App Store Connect API 如果你想以编程方式访问数据 并构建自定义解决方案 这些非常有用 也许你已经建立了 一个分析管道 那么这些API是你整合 所有这些很酷的分析的完美工具 查看来自WWDC 2020的视频 《识别电源和性能API的趋势》 它详细介绍了API端点和响应 让我快速概述一些API响应 对于指标 你可以向 perfPowerMetrics端点 发出GET请求 这将返回一个JSON响应 其中包含 你最新版本的app指标和观点 让我们进入观点部分 在观点中 你会发现你app的 所有退化 对于每个退化 你将找到指标类别 和已确定的退化摘要
这是我们在Xcode Organizer中 发现的非法指令导致的屏幕终止
接下来 你将找到Population部分 这提供了受影响的百分比和设备的 详细结构化列表 你可以使用这些来采取重点行动 提高app的性能
同样 对于诊断报告 你可以向 diagnosticSignatures端点 发出GET请求 响应将包含一个顶层签名列表 每个签名都有一个连结 指向与其相关联的详细信息
对此连结的GET请求将为你提供 详细的诊断日志 和与签名相关的观点 在你的分析管道中使用这些API 当你看到观点时 立即采取行动 现在你知道了什么是性能退化 如何诊断它们 以及在哪里可以找到 可操作的数据来修复它们 下面是你接下来要做的事 现在打开Xcode Organizer 查看退化窗格 查看你的app的 主要性能退化是什么 找出你的app写入了多少 顶层磁盘写入调用堆栈 是否符合你的预期? 或者是否有隐藏的漏洞 会减慢你的app? 最后 制定计划 以保持app的最佳性能 定期检查Xcode Organizer 并在任何自定义分析管道中 使用App Store Connect API 谢谢你抽空收看 祝你成功抓出退化 [欢乐的音乐]
-
-
13:00 - App Store Connect API Metrics
GET /v1/apps/{application-id}/perfPowerMetrics GET /v1/builds/{id}/perfPowerMetrics
-
13:01 - App Store Connect API Diagnostics
GET /v1/builds/{id}/diagnosticSignatures GET /v1/diagnosticSignatures/{id}/logs
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。