大多数浏览器和
Developer App 均支持流媒体播放。
-
提升电池续航能力和性能
了解在日常开发、beta 版测试和 App Store 上公开发布的过程中查找和修复性能问题的新方式。学习如何通过在 XCTest 中衡量 CPU 和内存等来发现日常开发中的性能问题。探索如何利用 MetricKit 在 beta 版测试和公开发布过程中查找实际使用问题。了解 Xcode Organizer 现在如何显示您的 app 中最重要的指标,这些指标从 App Store 上各个版本汇总而来。
资源
相关视频
WWDC21
WWDC20
WWDC19
-
下载
(延长电池寿命和改善电池性能)
谢谢大家 大家好 你们都好吗? 欢迎参加WWDC 我是Phillip Azar 今天能在这里与大家分享 延长电池寿命和改善电池性能 我感到既骄傲又高兴
你们的app 是我们软件体验的中坚力量 它们让我们的用户能够 做这么多的事情 参与这么多体验 没有你们的app 他们永远都做不到 你可以想象
如果你们的app 不能提供良好的电池寿命 并且也不提供良好的性能 这会让用户们非常失望 因此今天我们想讲一些相关信息
我们要讲一些工具 其中有新工具 也有老工具 你可以用来针对电池寿命和电池性能 优化你的app 我们要讲一些指标 你可以使用那些工具收集这些指标 从而了解并量化 你的app对电池寿命 和电池性能的影响 然后我会把舞台交给我的同事 他会进一步地讲这些工具 并给你们做一些演示 以及如何在你的app中 使用这些工具 来延长电池寿命和提高电池性能 然后我再返回舞台 总结一下今天的内容
让我们从工具开始讲吧
为了开始讲工具 我们需要先讲一下工具的开发过程 并熟悉一下这些工具 开发分为几个阶段 我们把它分为三个不同阶段 开发和测试是第一阶段 在这个阶段 我们形成概念并开始创建 这是一个非常反复的过程 我们要么在办公桌前 或要么在公园里 我们真的在努力了解是什么 让我们的app成为优秀的app
下一个阶段叫做beta测试 在我们开发好app的功能之后 我们就准备好做测试运行了 我们把app提供给一些人 就是我们的beta测试用户 我们尝试获得反馈
最后当我们对我们所收集到的 所有反馈都感到非常自豪时 我们就已经准备好迎接黄金时间了 即公开发布 此时app 会在App Store上线 并面向全球数百万客户
对于电池寿命和性能 每个步骤都至关重要 我们需要对每个步骤都进行优化 从而确保我们修复漏洞 并让客户获得尽可能好的体验
考虑到这些在iOS 13 和Xcode 11发布之前 我们提供了一些很棒的工具 帮助你了解你的app 对电池寿命和性能的影响
在开发和测试过程中 我们使用Xcode 以及它所包含的所有工具 比如Instruments、Energy Gauges 和Profiling工具
然后在beta测试中 你可直接在beta设备上收集痕迹 通过使用开发人员设置并在 Instruments中打开它们 这些对于了解 在开发环境中可能不会发生 但却在实际运行时可能发生的问题 很有帮助 比如当手机信号不好时
最后Xcode提供一组强大的日志 你可以从公共发布中了解 比如崩溃和CPU报告 这些帮助你了解一些问题 这些问题可能是针对特定区域 或针对特定客户的 这些客户可能与你的情况不一样
通过这些工具 在过去的几年里 我们一直在进行自我反思 我们觉得很可能存在一些 我们可以填充的空白 我们间接或直接地跟你们中的许多人 都沟通过 我们得到的反馈是 绝大多数空白都与指标有关 我们该如何量化 app的电池寿命和性能? 我们该如何在功能A和功能B之间 做出选择?
今天作为Xcode 11 和iOS 13中的一部分 我超级高兴地跟大家宣布 我们认为我们已经填补了那个空白 我们已经通过三个新工具弥合了空白 你们从现在开始就可以使用它们了
我要从XCTest Metrics开始讲 这是我们随Xcode 11 一起提供的第一个新工具 它可以让你直接 在XCTest中收集 所测量部分的性能和电池寿命指标 这将为你提供一些关键优势 当你在早期运行XCTest 并尝试了解 特定功能所产生的影响时
下一个是MetricKit 这是我们特别针对 电池和性能指标收集 所创建的强大的新框架 它会直接在你的app中 为你提供指标 并帮助你从所有不同用户那里了解 你的app实际运行起来怎么样
然后最后 我们给Xcode Organizer增加了 Xcode Metrics Organizer 它是一组高级别汇总指标 你可以直接在 Xcode Organizer中查看 无需修改任何代码 它会为你提供很棒的高级别概览 关于你的app在全球范围内 对所有客户的表现如何
那么回头来看 我们刚讲过的这个图表 你可以想象得到所有这些工具 非常适合开发过程 从开发和测试阶段的 XCTest Metrics开始
然后MetricKit 你能想象得到 它很适合beta测试和公共发布 当你不具备 想要从中收集指标信息的设备时
最后是Xcode Metrics Organizer 加强了你对公共发布的了解 并帮助你从实际用户那里了解问题
因此当你把这些组合到一起 我们会看到我们有更多的指标 来量化开发过程中 每一个阶段的电池寿命和性能 我们认为这非常棒
我们稍微讲了一下这些工具 我同事稍后会具体深入地 讲每一个工具 但现在我想讲一下它们所提供的指标 因为没有这些指标 我们就不能量化我们的影响 让我们现在就开始吧
今年我们提供两组指标… 电池和性能
谁会猜到呢?
对于电池指标 我们今年提供了一大堆指标 这些指标会帮助你量化 对电池寿命的影响
处理、定位、显示、网络、
Bluetooth和配件指标、 多媒体指标和摄像头指标
这些是一大堆指标 非常强大 但我只想讲其中一些指标 是我们认为对每个人 都非常重要的指标 从处理指标开始讲
处理指标 就像你想象的那样 类似于CPU和GPU时间 我们希望你使用这些指标 量化和理解app的工作负荷 因此比如 你可以实现比如 在你可能无法预料的地方 找到CPU风扇 此外 你可以使用 你可以使用这些指标在你的app中 找到意想不到的渲染
关键是我们想让你们使用这些 处理指标 比较app的功能的算法效率 就像我们之前讨论过的那样 如果你有功能A和功能B 你可以使用这些指标来决定 哪个功能对延长电池寿命更有效
接下来我们有定位指标
这些指标会帮助你 了解和量化你的定位使用 比如你的累积使用、 不同精度的桶 以及后台定位使用
请使用这些指标来了解定位的使用 因为它对于电池寿命来说 是个常见的陷阱 比如 你可能会遇到定位一直运行 但你并不希望它运行的情况 或者你可能使用了一个 对于你所实施的定位的用例来说 太过强大的精确度桶
因此这些指标会帮助你了解并优化 那些情境
接下来我们提供显示指标 今年我们为你们提供了各种不同的 显示指标 但我想特别指出其中一个 它叫做平均像素亮度
在你的OLED设备上 比如iPhone X和XS app中UI的颜色 对你在显示上所消耗的电量 有直接影响
我们通过一个叫做平均像素亮度 或简称为APL的指标来表示
简而言之 你在UI中使用的颜色越浅 你在OLED设备上 所消耗的电量越多 我们把这个称为APL较高
你在UI中所使用的颜色越深 我们把这个称为APL较低 并且这样消耗的电量也越少
因此今年请注意一下平均像素亮度
最后但同样重要的是我们有网络指标
你可能已经想象到了 这些是指 比如通过蜂窝和Wi-Fi 进行上传和下载的字节数 以及连通性指标
我们希望你尽可能优化网络使用 因为它是一个高能子系统 因此通过这些指标来执行 比如验证所预期的上传和下载计数 也许有一个上传 不应该在稍后的时间发生 你可以使用这些指标来了解具体情况
更重要的是 我们希望你们能了解 连通性对网络传输的影响 当进行联网时 它在你消耗的电量方面 起到重要作用 这些指标将帮助你了解 你是否长期处于 连通性差的情况下
这些就是电池指标 我们认为这一大堆指标 可以帮助你量化 你的app对电池寿命的影响
让我们继续讲性能指标 今年我们提供挂起指标、 磁盘指标、app启动指标、 内存指标和自定义间隔指标
与电池指标一样 我只想讲其中几个指标 是我认为对我们所有人 都非常重要的指标
从挂起指标开始讲
今年挂起指标是一个柱形图 表示你的app对于用户输入 无响应的时间长短
这是一个巨大的用户影响 你可以想象 如果用户正在使用你的app 但它突然停止工作了 那很不好
因此请使用这些指标 来了解何时把工作从主线程上移开 如果可能的话 并使用比如分派和异步提示 这样的功能 来减少挂起率
接下来我们有磁盘指标 今年我们的重点是 符合逻辑的磁盘写入
我们希望你们尽可能地量化磁盘使用 因为磁盘使用与所有子系统一样 是一种你只应该在真正需要的时候 才能使用的资源
因此使用这些指标来验证 是否存在意料之外的磁盘写入 并且如果你正在对磁盘写入 部署任何合并策略 你也可以使用这些磁盘指标 来进行验证
下一个是app启动指标
这超级棒 因为今年我们提供 启动和恢复时间柱形图 从而帮助你了解 app的启动和恢复时间
我们希望你们使用这些指标 来量化启动和恢复对性能的影响
我们希望你们了解启动活动的影响 因此当你在app启动之前执行 比如数据库更新操作时 这会直接影响你的启动和恢复时间 这些指标会让你实时查看 启动和恢复时间
我们还希望你了解 启动和恢复之间的区别 因为它们是两个截然不同的路径
要获取多信息 以及如何优化app启动 我推荐你参加明天的演讲 叫做优化app启动 时间是下午4:20
最后一个但并不是最不重要的 我们有内存指标 今年对于内存 我们提供比如 挂起平均内存和内存峰值
内存管理确实会影响启动时间 因此我们希望你使用这些指标 关注并密切注意内存使用 这对于性能来说 是一个至关重要的指标
使用这些指标来了解内存使用 并且如果内存峰值比你预期的峰值高 这可能表示出现了 比如难以重现的内存泄露
如果你把注意力集中在 减少挂起时的平均内存上 你可以通过这些指标进行量化 你还可以减少启动时间 以及对后台终止的敏感性
这就是其中一些性能指标 我们认为这些对于 帮助你了解设备上和脱离设备的性能 非常关键
回顾 我们讲了Xcode 11 和iOS 13之前所拥有的工具 用于了解和量化电量和性能
然后我们讲了 我们今天为你们提供的新工具 从而进一步量化 并帮助你优化你的app 这些很棒的指标 确实会帮助你把你的app 提升到下一个层级 闲话少叙 舞台交给我的同事们 他们会深入地讲 我们刚才讲过的每一个工具 Sastry先讲 他要讲一下在开发和测试阶段 用XCTest指标测量app 所产生的影响 Sastry?
谢谢Phil 大家好 我是 Sastry Vadlamani 我是Apple的一名软件工程师 让我们回顾一些 你可以自由使用的工具 它们用于在开发和测试阶段 测量app所产生的影响 就在Xcode的调试导航器内 你可以看到CPU内存 和电量子系统的高级别概览 当你希望深入了解细节 或诊断一些问题时 Instruments 是个很有用的工具 它带有模板 可以帮助你诊断内存问题
系统无响应性 内存过度使用以及电量问题
你还可使用XCTest来测量性能 XCTest是一个程序 你可以用它编写UI和单元测试 可以无缝整合到 Xcode测试流程中
你不仅可以测量性能 你还可以获取具有基线的回归
直到去年 你所能测量的唯一指标 就是世界时钟时间 性能的指标更多 因此今年我们向XCTest中 添加了一些新的性能指标
让我们具体看一下细节 这是XCTest的一个示例性能 你需要模式化一块代码 指明在测量方法中 要实施的动作 它会测量它实施… 执行这块代码所需要的时间 现在为了把这个转化为 性能测试的新样式并获取更多细节 我们只需要模式化时间、 内存和CPU对象 把它们打包到一个列表中并把列表 作为参数传给测量方法即可 通过这些小修改 你现有的性能测试就可以测量 多个指标
我们有点偏题了 通过你使用XCTest 创建的每一个新UI测试目标 我们可以让你们免费执行一次 app启动测试 因此 不需要任何代码 你将可以进行 测量app启动时间的测试
让我们看一个演示
为了这场演讲 我们创建了一个叫做 Awesome Photo App的app
它有几个功能 让我带你看一下 它可以让你拍照
当你拍照时 它会给照片标记地理位置 因此你可以在下边看到定位 然后你在照片上应用一些 有意思的特效 我们将在接下来的演示中 引用这个app工具 你还拥有一些标准功能 比如从相册中加载一张照片 保存照片以及把照片上传到服务器上
那么这是什么意思? 如何从Xcode中 测试这个app? 嗯 我刚才提到过 对于你所创建的每个 新XCTest UI目标 都可以进行一次免费的 app启动测试 因此在演讲之前 我已经获取了运行这个测试的权利 结果就像这样 你可以看到 它花了大概0.2秒启动我的app 这是可以接受的 你可以看到多次迭代的结果 所有迭代的时间几乎都一样 这是一件很有意思的事 你可以设置你的基线 基线是一种机制 你可以在基线里设置参考 关于你所期待的性能值 因此无论何时当你的性能值 超过参考值时 测试就会失败 这就是如何获取回归的方式 那么你可以设置平均值 可以设置标准差
并且无论何时当你下一次运行测试时 如果有任意值超过这些条件 你的测试就会失败 我已经修改了代码 但我想确保app的 启动时间没有倒退 让我再次运行测试
当运行性能测试时 有几个要点你要记住 最好不要把调试器附加到进程中 因为它会增加一些消耗 并且最好关闭所有诊断选项 比如Sanitizers 你还可以通过创建独立的机制 或使用测试计划功能来实现 最新改进的功能是可以轻松关闭 测试计划功能 现在你可以看到已经运行了测试 并且测试失败了 如果你要深入去看细节 你会看到那是因为平均值确实超标了 我是说 原来是0.2秒 现在变成了大约1.2秒 因此为了调试这个问题 你可把它附加到Instruments 并用Timer Profiler模板 查找为什么app的启动时间 变得如此糟糕 我会为你揭开神秘面纱 并告诉你我做了什么 我实际上尝试查找一个数据库 在我的主线程上检查数据库更新 Phil刚才提到过 这样做很不好 因此正确方案是把这个任务分派到 后台任务队列中 希望这能修复我们的问题 让我们再次运行测试 并确保数值在我们所期待的数值之内
这里的关键是你可以… XCTest不仅帮助你测量 它还帮助你确保不会倒退 因此更多的是你只需写一次测试 就可以忘掉它了 并让它在你的CI系统中一直运行 并确保你了解你的性能不会降低 你可以看到 测试通过了 哇 我们修复了这个问题
因此把现有XCTest 性能测试转化为 我之前提到过的拥有更多维度的 性能测试非常简单 因此你所要做的就是 把你打算测量的对象 模式化到一个列表中 就像比如说 我有一个性能测试 测量的是拍照所花的时间
你知道的 使用照片并应用特效 之前这可能会只测量时间长短 但现在通过传递额外的 内存指标对象 我甚至可以测量内存 事实上是实施这些动作所消耗的内存
XCTest并不是仅限于UI测试 你还可以用它进行单元测试 我要给你们举个例子 我有应用特效功能 我可以选择 是否要使用一张或多张照片 从功能的角度来说 增加的值很小 但如果总量不多了 我宁愿这样做 因此我获取了运行这个测试的权利 并测试了它运行这个 给一张照片应用特效功能 所需要的时间 大约是1000KB 但现在测量不同情境的 增加的影响非常简单 你所需要做的就是修改代码 我把代码修改成拥有两个筛选器 并再次运行测试 测试运行时 你可以立即查看数值 了解了数值 你可以检查所产生的影响 那么你可以看到 影响是… 测试失败了 因为这个数值比原来的翻了一倍 大约是2000KB 因此很可能我要坚持 选择一张照片的方案 因此…
总结一下 我给你演示了 一些指标的使用 比如内存 但我们添加了许多指标 我们添加了内存 添加了存储 添加了CPU 还添加了OS标志牌 但我们并没有止步于此 我们丢弃了通用的底层系统 因此你实际上可以实施 你自己的自定义指标 并使用底层报告系统来获取回归 请查看文档获取更多详情 然后正如我在最后一个例子中 所演示的那样 你还可以使用XCTest来进行 某种AB测试 这是检查算法A是否比算法B 更好的方式 成本低而且简单 只需要进行简单的单元测试 你就可以得到性能值了
因为XCTest与Xcode 和Xcode服务器都能完美协作 你可以在开发和测试过程中 使用这个性能测试 并同时作为后续的整合系统的一部分 并确保你的app没有发生 性能方面的倒退 这就是用XCTest 进行性能测试中的新功能 接下来我想邀请Ashish上台来 他会讲一下在实际情况中 测量你的app所产生的影响
谢谢Sastry 在初始测试和开发阶段之后 收集实际指标有许多好处 从而进一步优化电池寿命 和app的性能
这包含利用只有少数用户的 beta用户群 以及更广泛的客户群
在实际情况中 你的app 会经受许多不同的用户情境 比如不同的蜂窝网络、信号条件、 不同类型的设备以及不同的地理位置 这些帮助你识别在桌面测试过程中 可能没被发现的问题
你还可以使用这个实际指标 对比当前版本的app 和之前版本app的电池寿命和性能 你可以使用这个数据来发现 是否存在任何回归或异乎寻常的问题
这些现实指标还可以帮助你了解 新功能所产生的影响 通过在现实情况下让大量客户 进行A-B测试来实现
为了解决这个问题 我很高兴地宣布 我们要发布MetricKit 它是一个设备上的框架 用于收集你app的电池寿命 和性能指标
我们还在MetricKit中 添加了一个功能 用于收集你app中 关键区域的相关指标
我们已经把这些功能都嵌入 MetricKit中了 并在我们的数据收集汇总机制中 保护用户们的隐私权
采用MetricKit非常简单 接下来我会告诉你如何实现
此处代码采用MetricKit 所需要的一切 首先导入MetricKit框架 并在app中创建一个类 遵守指标管理器订阅者协议
你要在类内订阅指标 这就让设备了解你的app有兴趣 接收来自MetricKit的指标 从而它会开始在设备上收集指标
最后作为开发人员 你需要实施一个叫做 didReceive的委托方法 无论何时当在设备上 向你的app提交指标有效载荷时 都会涉及到这个方法 一旦在设备上收到此种有效载荷 由你决定采取哪些行动 比如你可以选择把它保存到文件中 或还可以上传到服务器 从而可以从多个用户那 收集现实数据
在使用指标之后 在采用MetricKit之后 因为你的app是在白天使用 我们将自动为app收集汇总指标
在24小时结束时 我们会生成一整天的指标摘要 过去的24小时 并在设备上返回这个有效载荷
现在让我们了解一下如何测量 app中关键代码段的影响
返回到Sastry刚才描述过的 Awesome Photo App示例 用户可以在app中实施多种活动 比如他们可以选择拍照 并在所拍照片上应用许多很酷的特效 如果他们喜欢他们所实施的特效 他们可以选择把照片保存在设备上 MetricKit提供捕捉 app中每个功能对电池寿命和性能 所产生的精确影响的功能
现在让我们了解一下如何实现 我们很高兴在MetricKit内 引入了一个新API 叫做mxSignposts 它作为环绕式OS标志牌实施 通过用mxSignpost 截断app中的关键部分 你可以捕捉精确的影响 让我们举个例子
那么要使用mxSignpost 你所要做的就是使用MetricKit的 生成日志处理生成器 并用它创建一个日志处理 并使用那个日志处理把mxSignpost 拖动到关键代码部分 在这个例子中 我想测量 Awesome Photo App中 保存照片功能的影响 我在这个app的代码之前和之后 都拖入了mxSignpost MetricKit将在设备上 自动收集指标 并替你处理它们
现在让我们看一个演示 我会告诉你们如何在自己的app中 采用MetricKit
现在我返回到了我app的 Xcode项目中 我现在位于我app的 controller.swift视图文件中 你可以看到我已经在这里采用了 MetricKit框架 并创建了一个类 遵守指标管理器订阅者协议
在那个类内 我已经给didReceive方法 添加了一些代码 因此无论何时当有可用的 指标有效载荷时才涉及到这个方法
对于我的app来说 我决定把数据保存到一个文件中 从而稍后可以进行一些设备内处理 为了今天的演示 我还写了一个函数来打印这个数据 我可以让你看一下有效载荷的内容 最后我还写了这个函数 用于把数据上传到我自己的服务器上 因此它可以在beta测试过程中 从多个用户以及客户那里 收集这个数据
现在因为这个方法 每天最多只能使用一次 无论何时当有对我们的app可用的 有效载荷时 我们在Xcode中创建了新功能 可以帮助你测试一下这个 让我来给你演示那是如何运作的 我们首先在我的测试设备上 运行这个app
那么app现在正在运行 现在我要进入调试并点击选择 MetricKit有效载荷 它会向你的app发送虚拟有效载荷 从而你可以测试 didReceive方法内的代码 现在让我们看一下今日可用的 MetricKit 有效载荷中的内容
这里的第一个例子 显示了与app相关的一些元数据 比如版本号 设备类型和OS版本号 然后我们有一些与非常有用的 性能指标相关的频率分布图 比如app启动、恢复和挂起
然后我们有与app使用相关的指标 比如前台和后台时间 以及一些后台指标 比如CPU时间和GPU时间 然后有一些指标围绕定位使用、 以及网络、磁盘IO内存和显示 最后有一部分指标是 围绕你app的 mxSignpost汇总 你可看到现在MetricKit中 有大量指标可用 因此我强烈推荐你查看我们的文档 了解更多详情 让我们现在返回到幻灯片中
你可以看到 正如我们在演示中看到的那样 使用MetricKit非常简单 请立即开始在你的设备上获得指标
对于 同时对于app 我们决定开车去旅行 并收集一些现实的度量 以及一些有意思的照片
在我们的 Awesome Photo App上 实际使用 MetricKit的第二天 我们得到 我们得到了设备上的有效载荷 上传到了我自己的服务器中 通过我刚才展示给你的那段 app代码
现在让我们使用从现实使用中 收到的这个数据 来识别Awesome Photo App中的 一些热点
根据第一个示例 这个数据显示了 app的全部前台时间 和后台时间 以及不同精确度市场的全部定位使用 它显示了app的定位使用 大约是720秒 非常接近于前台时间 这非常出乎意料 我使用定位就是 无论何时当我拍照时 就给照片标记地理位置
返回到app中 我忘记… 我发现我在获取定位后忘记关闭它了 这是关于如何使用 MetricKit 来识别意料之外的app行为的 一个很好的例子 我们使用这个数据 可以优化的另一个功能是 减少定位使用 如果我们的用例中 可以使用定位的话 因为定位精确度越高 电池消耗量也越大
下一个例子显示了app挂起时长的 柱形图 数据表明有许多实例的 挂起时长多于5秒 这是一种非常糟糕的用户体验 Phil刚才讲过 其中一种解决方式就是 避免在主线程中 进行持久的模块化调用 从而减少任何挂起实例
最后一个例子显示了如何 在MetricKit中使用mxSignpost数据 识别指定app代码区域的热点
在我的app中 我决定在所有主要 功能上都放mxSignpost 比如加载照片、应用特效、 加时间戳、保存照片和上传照片 使用mxSignpost、 MetricKit可以计算 每个实例在实际情况中的运行次数 以及一些电池寿命和性能指标 比如整个app的累积的CPU时间 和全部CPU时间
这个数据表明有许多 应用特效功能的 CPU使用占50%以上 现在我知道如何进一步 优化我的app 从而减少整体的电池消耗量
接下来是这部分的主要内容 从iOS 13开始 你可以用MetricKit 收集你的app在实际使用时的 电池寿命和性能指标
你可以使用MetricKit 较早地识别你app中的热点 比如我今天展示的那个例子 通过beta测试人群 或你也可以通过客户群来做
并且在我们今天的例子中 我们了解了如何使用 来自单一用户的MetricKit 数据来识别热点 汇总来自多个用户的相同数据 可以为你提供有关改善你的app的 更深入的洞察力
现在我要把舞台交给Anshul 他会讲一下 Xcode中开箱即用的遥测方案 Anshul?
非常感谢Ashish 大家好 我是Anshul Dawra 我要讲Xcode指标核心管理器 这是我们今年在Xcode 11中 引入的一个很酷的新工具
Xcode指标管理器是一个 开箱即用的方案 是我们在Xcode 11中 为你们提供的 用于浏览电量和性能app分析 你可以了解app在客户设备上 在电池寿命和性能方面表现如何
你不需要对app进行任何修改 你可以在Xcode 11中使用它 我们在整个过程中都注意保护隐私权 从在设备上收集数据 一直到在服务器上汇总数据 因此你今天就可以开始使用 这个数据了
它的运作方式是 当有用户使用你的app时 我们围绕你的app收集指标 这些指标会在设备上进行汇总 然后发送到我们的服务器上 在服务器端 我们对这个数据进行分析 并提取相关见解 这些见解在指标管理器中显示
请注意这些见解只显示在 指标管理器中 如果你的app的使用足够达到 我们的临界值的话
这些功能都是开箱即用 不需要修改你的app或开发过程 今天你们就可以用 闲话少叙 让我们看一下演示
要打开指标管理器 请进入窗口 管理器
那会提出一个熟悉的管理器窗口 有存档、崩溃和电量标签 以及一个全新的指标标签 如果你点击指标 你会在左手边看到 你在iOS App Store中 所发布的所有app 假设我们发布的 Awesome Photo App在这里显示 当我们点击那个 Awesome Photo App时 这个app的相关指标 会在中间面板中显示 指标比如电池寿命、启动时间、 挂起率内存和磁盘写入 这些指标是我们认为 你要获取优秀的app体验 应该考虑的指标
当你点击其中一个指标时 右手边会显示关于该指标的详情 你可以任意版本的app的指标 或你可以把它与之前版本的指标 进行对比 这里的X轴代表app版本号 Y轴代表指标值
让我们先来看电池指标
电池有两种指标 第一种是屏幕上的电池使用 这是当用户在屏幕上 与你的app进行交互时 所消耗的电量 然后后台电池使用是 当app在后台运行时消耗的电量 现在每种指标都按照系统组件 进行了进一步的划分 比如处理、网络、显示定位 从而你可以了解哪些组件 最消耗电量
让我们从后台电池使用开始看 因为我们知道 Awesome Photo App只在前台使用 通过查看后台 看起来每天消耗大约10%电池电量 这个数值非常高
除了这个 看起来 处理消耗了5%电量 网络消耗了3.66%电量 这些数值都太高了 我们需要进一步调试 找出app为什么会在后台 消耗电量的原因
让我们查看当最新版app 处于前台时的数据 最新版app处于前台时 看起来最新版本 比上一个版本降低了10% 其中显示指标看起来比较稳定
网络指标稍有增加 其它指标都稍有降低 但这里的罪魁祸首是处理指标 我们可以查看90%用户群 和50%用户群时的这些数据 看用户群是否在电量消耗方面 发挥任何作用 我们还可以查看 全部iPhone类 或全部iPad类 或单一设备的数据 让我们 比如说 查看iPhone 6设备的数据 对于iPhone 6 看起来电量消耗非常稳定 1.0.8与1.0.7相比 稍有降低 让我们再看一个较新的设备 比如iPhone X 啊 iPhone X有一个大跳跃 请看这里 与先前的设备相比 有一个14.4%的跳跃 而罪魁祸首就是处理指标 对此进行进一步调试有许多方式 我们可以直接进入代码 或进入我们去年引入的 那个熟悉的电量标签 电量标签显示实际运行时的 电量异常报告 你可以查看堆栈帧 查找哪里最消耗电量 我知道Ashish讲了 一种新功能…
他只对较新的设备 和我们app的1.0.8版本 添加了新功能
applyFilter导致了这个 问题 因此我们可以对它进行调试 这是其中一种使用指标 和电量标签来找出问题 并修复问题的方式
现在让我们看一下其它可用的指标 启动时间对于我们的用户来说 非常重要 因为启动慢的app会让用户们 感到失望 理想情况下 启动时间应该在数秒内 我们的Awesome Photo App在所有 iPhone上的启动时间大约在6秒钟 你可以使用Sastry 在他之前的演示中所讲过的工具 进行进一步的调试
挂起时间是app的无响应时间 单位是秒每小时 理想情况下挂起时间应该为0 以避免用户失望
我们展示了两种内存—— 峰值内存和平均内存 内存是一种资源 我们应该… 我们应该只在绝对需要时使用它
磁盘写入是你的app所执行的 逻辑写入 我们需要留意我们执行了多少写入 我们可使用Instruments 对它进行进一步调试
这就是Xcode指标管理器 一种开箱即用的工具 用于浏览电池和性能分析 并围绕高耗电量性能导致的问题 进行调试
比如启动时间长 你可以检测 你可以查看最新版app的数据 并与上一个版本的数据做比较 并创建一个基线 你今天就可以使用这个工具了 无需修改你的app或开发生命周期 因此请试着使用它 并给我们提供反馈 非常感谢你们的聆听 舞台交还给Phil
谢谢Anshul
我们了解了这些很棒的工具 我想快速总结一下 我们今天讲过的内容
我们讲了在Xcode 11之前 就可用的工具 用于调试和了解 设备上的电源和性能影响
然后我们给你展示了一些新功能 我们认为它们非常强大 并会帮助你把量化 性能和电池寿命影响 提升到下一个层级 以及可以从这些工具中收集的 一组指标 用于进一步了解并调试代码
如果你从这个演示中学到了什么 我希望你了解了我们为你们打造了 三个很不错的工具 我们非常想得到你们对它们的反馈 这些工具会帮助你量化 你的app对电池寿命和性能 所产生的影响
那种量化会 帮助你做出决策 为所有用户提供更好的体验
要获取更多信息 请上网查看我们演讲的相关文档
或参加我们明天的电量和性能演讲
我们很高兴明天在演讲上见到你们 我们会讲如何在你的app中 实施这些工具 以及如何使用这些工具 为用户打造优秀体验 别忘了参加明天的 优化app启动演讲 他们会深入地讲一下app启动性能 再次感谢你们的参与 请享受余下的WWDC时光
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。