1

我正在开发一个包含以下功能的项目。

  1. 每 60 秒获取位置并发送到服务器。
  2. 音频/视频通话。

为项目设置的背景模式如下所述 在此处输入图像描述

iOS:14.1 Xcode:12.1 斯威夫特:4

问题:每当我将应用程序置于后台时,它都会获取位置或调用某个时间,然后我会在日志中收到以下错误。每当我在进行音频通话时将应用程序置于后台时,音频会工作一段时间,几秒钟后会出现以下错误。

Message from debugger: Terminated due to signal 9.

当应用程序处于前台时,所有事情都可以正常工作。应用程序获取位置和呼叫工作。

请建议我还需要做什么或我做错了什么。

4

1 回答 1

0

您问题的评论线程表明终止是由于后台 CPU 使用率过高。

根据您的最后评论,听起来您不知道从哪里开始使用 Instruments(我去过那里),正如另一位评论者推荐的那样,所以我将提供一些有关如何开始在仪器中进行 CPU 分析的基本信息,然后您可以在线查找更详细的教程(这个来自 Apple 的 WWDC 视频是一个很好的起点:https ://developer.apple.com/videos/play/wwdc2019/411/#:~:text= Instruments%20is%20a%20powerful%20performance,optimize%20their%20behavior%20and%20performance )

以下假设使用 Xcode 12.1 及其对应的 Instruments 版本 12.1,但最近的版本应该非常相似(可能在旧版本中按钮的位置略有不同等):

  1. 在 Xcode 中打开您的应用程序项目,并在真实设备上运行它(模拟器将为您提供有关您的 Mac 的 CPU 使用情况的信息,并且与真实设备有很大不同)。
  2. 转到左侧边栏中的调试导航器 (Cmd+7),在边栏中选择 CPU,然后单击右上角的Profile in Instruments按钮。
  3. 如果询问,请选择“配置当前会话”。
  4. 仪器应自动启动并开始录制。
  5. 在您的设备上重现问题。

现在要了解 Instruments 中显示的内容:

  1. 顶部窗格(移动图表)显示一段时间内的 CPU 使用率。
  2. 底部窗格显示已运行进程的调用树。

那里有很多信息,所以您想查看Filter and configuration bar窗口最底部的 ,并首先选择 Call Tree 菜单中的所有选项。它看起来像这样:调用树配置控件

以下是每个选项的简短说明:

  • 按线程分离:按线程显示进程以帮助诊断过度工作的线程
  • 反转调用树:反转堆栈以首先显示底部部分,这可能对故障排除更有用
  • 隐藏系统库:删除系统库进程,从而减少噪音,您可以只关注应用程序的代码
  • Flatten Recursion:将递归调用合并到一个条目中
  • 顶级函数:结合被调用函数使用的时间,加上从该函数调用的函数所花费的时间。这可以帮助您找到在 CPU 使用率方面最昂贵的方法。

现在,您已经获得了仅适用于您的应用程序的昂贵 CPU 方法的过滤列表,并且选择一行可以在调用树视图右侧的扩展详细信息窗格中为您提供更多信息。这可以准确地向您显示您的代码文件在哪个方法中运行,甚至可以在 Xcode 中将您带到它(只需单击几下按钮)。

希望这足以让您开始,识别代码中可能导致您的应用程序终止的一些潜在问题区域。

于 2021-03-11T21:02:32.640 回答