Ask Apple问答汇总之devtools-and-swift

2,604 阅读10分钟

近期,苹果开发者网站发起了Ask Apple活动,邀请开发人员直接与苹果专家沟通。

活动时间是2022年10月17-21日,目前活动已结束。

苹果为我们保留了本次活动中所有内容供开发者查阅。

我认为有必要在这里对一些感兴趣相关专题中问答内容进行汇总并翻译,供大家参考。

由于水平有限,文中的翻译可能有些不准确或有些小错误,还望大家在阅读过程中理解。如果您发现错误或有更好的想法,欢迎指正🙌🏻

devtools-and-swift

截屏devtools-and-swift.png

如何加快应用程序加载时间

Developer:

为了加快我们的应用程序加载时间,应遵循哪些一般准则?

Apple:

好问题!您可以查看很多资源: 首先,我建议您看一看这篇文章: Developer:.apple.com/documentati… 如果您有更多的时间,并有兴趣了解更多有关它的信息,这里有两个关于该主题的WWDC精彩会议:

是否可以使用Xcode查看最新的系统收集数据

Developer:

感谢举行此次Q&A活动!我对系统收集并通过 Xcode 公开的指标(电池使用情况、内存、滚动等)有疑问。对于我们的应用程序,我们可以看到一些非常旧版本的条目,但没有最新版本的数据(6 个月以上)。 如果您已将自定义 MXMetricManager 添加到应用程序,是否有可能数据不会发送到 Xcode/App Store Connect?

Apple:

MXMetricManager(以及通常使用的 MetricKit)对您在 Organizer 中的数据没有影响。组织者设置了阈值,以防止传递冗余的数据 - 如果您在 feedbackassistant.apple.com 上使用您的应用程序的捆绑 ID 和名称提交反馈,我们可以查看并了解您可能看不到数据的原因!

Developer:

感谢您的澄清!我已提交 FB1170509😊

关于在多个推送通知扩展之间共享数据时导致App崩溃的问题

Developer:

我们需要在多个推送通知扩展之间共享数据,当我们将应用模式设置为groups时,App有时会崩溃。TestFlight提供以下信息:

Exception Type: EXC_CRASH (SIGKILL) Exception Codes: 0x0000000000000000, 0x0000000000000000 Exception Note: EXC_CORPSE_NOTIFY Termination Reason: RUNNINGBOARD 0xdead10cc

但这些信息并不是很有帮助,是否有关于确定原因和解决问题的任何建议?

Apple:

嘿,你好!此终止原因(0xdead10cc)是由于某个文件或数据库在挂起时由您的应用/扩展程序保存。有关应用和扩展程序生命周期的详细信息,请查看以下 Developer:.apple.com:

App Extension Programming Guide: Understand How an App Extension Works

介绍如何开发应用扩展,该扩展是向其他应用添加功能的可执行文件。

XCUI Framework在Xcode 14上似乎有问题

Developer:

你好! 在我们的项目中,我们对 CPU、磁盘和内存进行了性能测试。它们确实正常工作,直到我们移动到新的Xcode 14。似乎在 Xcode 14 上 XCUI Framework被破坏了。我们已经为苹果创建了一个Feedback Assistant ticket。但是我们想知道您是否知道这个问题?

Apple:

感谢您向我们发送有关此内容的反馈报告!您能与我们分享您提交的报告的FB编号吗?如果您手头没有,您应该可以在 feedbackassistant.apple.com 再次找到它。

Developer:

给你FB11675516

我想补充一点澄清:问题不在于对反馈本身的认识。这是关于Xcode 14上的XCUI Framework的问题。😊

Apple:

嘿,Dana,澄清一下 - 您的测试在视觉上看起来运行良好,但是您没有看到磁盘使用情况数据?

Developer:

嘿!谢谢你关注这个问题!我确认 iOS 上的性能测试运行正常,但已停止提供结果。

Apple:

嗨,Dana - 你能把你的XCResults捆绑包添加到你提交的反馈中吗?

Deleloper:

嗨,当然我们会尽快在那里添加结果!

单例模式是依赖注入的理想选择吗?

Developer:

单例模式是依赖注入的理想选择吗? 在我们的例子中,我们有很多依赖项,尽管它非常方便,但我们想知道它是否会直接影响应用程序的性能或功耗。

Apple:

首先 — 始终先分析并使用数据进行优化。 从 CPU 使用率的角度来看,如果单例模式成为一个问题,我会感到惊讶,除非有一个非常频繁的调用站点反复查找单例,但这种事情应该显示在时间配置文件中。 从内存使用的角度来看,单例通常永远存在,所以如果它们随着时间的推移建立大状态,那肯定是一个问题。Memory Graph Debugger可能是查看你的应用保留的内存的好方法,以及它是否与保存在全局变量中的单例相关(以__DATA)。请注意,如果全局变量只是指向对象的指针,则它们不太可能成为问题,但如果您想查看__DATA则可以运行symbols <binary>

关于应用程序挂起可能会导致UI无响应的问题的解决方案

Developer:

关于应用程序挂起:我们赞赏 Xcode 14 针对可能的应用挂起/UI 无响应性的新运行时警告,例如来自“核心位置”的“CLLocationManager.location服务启用()”中的警告:

如果在主线程上调用此方法,则可能导致 UI 无响应。相反,请考虑等待-authorizationStatusForType:回调并首先检查authorizationStatus。 我们也在观察“HKHealthStore”的“授权状态为类型”中的应用程序挂起,但是,Xcode不会专门为它们产生任何运行时警告。是否已知/预期-authorizationStatusForType:可能会导致 UI 无响应,如果是这样,有哪些可能的解决方法?

Apple:

嘿,你好 这是很好的反馈!正如您所注意到的,Xcode 14 显示了有关某些 API 滥用的新运行时警告。目前,其中许多是关于经常被滥用的 API 的特殊情况警告,但我们尚未审核所有 API。 我们现在没有HealthKit工程师,所以我无法回答来自HKHealthStore的授权状态是否authorizationStatusForType,或者是否有异步替代方案可以使用。但是,如果能有这些信息,那就太好了。 如果您看到挂起是由authorizationStatusForType引起的,您能否通过 feedbackassistant.apple.com 提交反馈,要求修复挂起或生成运行时警告以进行API滥用? 如果您觉得文档不清楚如何使用它,那也是很好的报告反馈!

Developer:

会以文件形式提交反馈。

应用商店连接分析缺少的一个环节是可访问性数据

Developer:

应用商店连接分析缺少的一个环节是可访问性数据。如果启用了ax功能的会话远远少于预期,则通知开发人员将使用户,Apple的生态系统以及开发人员的市场渗透率受益。 由于这些是高度敏感的数据,因此收集、存储和分析最好由有意识的第三方(即Apple)完成。 作为金融机构(贷方),我们不希望接近用户的医疗信息,但我们确实希望标记可访问性问题和回归,而不仅仅是手动测试和UI快照测试。我们正在制定一个计划,该计划采取许多不常见的措施来确保完全匿名的可访问性状态收集,但它比大多数组织可能一时兴起做的要复杂得多。如果苹果提供替代方案,我们很乐意放弃它。

Apple:

嘿 Ryan,您是否正在寻找每天使用ax的用户百分比之类的东西?您能否提交一份反馈(feedbackassistant.apple.com),其中包含您的请求,包括您的想法,即您将从这些数据中得出结论,并对您的重要性,然后将FB ID粘贴回此处?

Developer:

fb11705152 是的,或会话数,但更多在功能级别,例如,旁白、动态类型大小等。 除非百分比足够大(例如,30%的黑暗模式或10%的亮度降低),否则不报告百分比也是可以的,因为看到“1%的VoiceOver”实际上可能会降低开发人员的积极性并破坏目的。在这些情况下,只需一个“如预期”或“有问题的低”标签就足够了。

为了帮助尽快加载或保持性能,是否有适用于大多数App的最基础的代码

Developer:

为了帮助尽快加载或保持性能,是否有适用于大多数App的最基础的代码

只是稍微超出了更改样板错误代码的基本范围,该代码使应用程序崩溃为一些有用的错误处理,并且稍微不那么基本,包括需要时的并发性。还是它总是几乎依赖于应用程序?

Apple:

嘿,你好!谢谢你的问题。通常,迭代代码并使用工具来衡量性能是一个很好的开始。我们强烈建议您检测 XCTest 性能测试,并在整个开发过程中使用仪器来定量测量性能。您可以在此处找到有关如何使用这些工具以及更多工具的精彩入门讲座: developer.apple.com/videos/play… 我还建议您仔细阅读以下文章,以全面了解保持良好性能的一些关键概念: developer.apple.com/documentati…

关于App被挂起或停止运行的解决方案

Developer:

如果我们的应用程序无法使用所有内核,但随后挂起/停止运行(无法创建新线程),我们该怎么办?fb10893202

Apple:

嘿 Steven - 感谢您提交FB,并对延迟回复您表示歉意。

也感谢您的示例代码。如果你有一种方法可以可靠地将它演示到你所看到的状态来复现,那将是非常有帮助的。 我们还在Ventura拉修复了我们认为可能是您的问题的调度队列。你能看看你是否也能在那里复现吗? 如果您可以复现并使用lldb附加并打印输入队列的状态和dispatch_get_global_queue(QOS_CLASS_DEFAULT,0)将有助于调度团队缩小此范围。

以上就是所有devtools-and-swift专题的问答内容汇总。今后我还会继续整理其他专题的内容汇总,大家可以持续关注💪🏻。

Todo List

  • design
  • graphics-and-games
  • photos-and-camera
  • swiftui