问题描述
iOS:14.1 代码:12.1 斯威夫特:4
问题: 每当我将应用程序置于后台时,它都会获取位置或调用一段时间,然后我在日志中收到以下错误。每当我在进行音频通话时将应用程序置于后台时,音频就会工作一段时间,并在几秒钟后出现以下错误。
Message from debugger: Terminated due to signal 9.
当应用程序处于前台时,一切如何正常工作。应用程序获取位置和调用工作。
请建议我还需要做什么或我做错了什么。
解决方法
关于您问题的评论线程表明终止是由于后台 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,但最近的版本应该相当相似(旧版本中按钮的位置可能略有不同等):
- 在 Xcode 中打开您的应用项目,并在真实设备上运行它(模拟器会为您提供有关 mac 的 CPU 使用率的信息,这与真实设备会有很大不同)。
- 转到左侧边栏中的调试导航器 (Cmd+7),在边栏中选择 CPU,然后点击右上角的
Profile in Instruments
按钮。 - 如果询问,请选择“配置当前会话”。
- 乐器应自动启动并开始录音。
- 在您的设备上重现该问题。
现在了解仪器中显示的内容:
- 顶部窗格(移动图表)显示您的 CPU 使用率随时间的变化。
- 底部窗格显示已运行进程的调用树。
那里有很多信息,因此您需要查看窗口最底部的 Filter and configuration bar
,并首先选择“调用树”菜单中的所有选项。它看起来像这样:
以下是每个选项的简短说明:
- 按线程分离:按线程显示进程以帮助诊断线程过度工作
- 反转调用树:反转堆栈以首先显示底部部分,这可能对故障排除更有用
- 隐藏系统库:删除系统库进程,减少噪音,您可以只关注应用的代码
- 扁平递归:将递归调用合并为一个条目
- 热门函数:将被调用函数使用的时间加上从该函数调用的函数所花费的时间。这可以帮助您找到 CPU 使用率最高的方法。
现在,您已经获得了仅适用于您的应用的昂贵 CPU 方法的过滤列表,选择一行会在调用树视图右侧的扩展详细信息窗格中为您提供更多信息。这可以准确地向您显示代码的哪个文件中正在运行的方法,甚至可以在 Xcode 中带您到它(只需点击几下按钮)。
希望这足以让您入门,识别代码中可能导致应用终止的一些潜在问题区域。