SwiftUI应用进入后台后立即被终止问题求助
SwiftUI应用进入后台立刻被终止的解决办法
问题现象
真机(iPhone 13 iOS16.6)上SwiftUI应用进入后台后立刻被Signal 9终止,模拟器无此问题;即使关闭所有应用、重启手机后仍存在,仅需短时间(10秒内)返回时能恢复应用状态。
项目代码:
import SwiftUI @main struct testApp: App { @Environment(\.scenePhase) var scenePhase var body: some Scene { WindowGroup { ContentView() } .onChange(of: scenePhase) { newPhase in if newPhase == .active { print("Active") } else if newPhase == .inactive { print("Inactive") } else if newPhase == .background { print("Background") } } } }
控制台输出:
2023-09-04 12:21:50 +0000 - Inactive 2023-09-04 12:21:50 +0000 - Active <- swipe to home without killing the app 2023-09-04 12:21:52 +0000 - Inactive 2023-09-04 12:21:53 +0000 - Background 2023-09-04 12:21:53 +0000 - Message from debugger: Terminated due to signal 9
排查与解决步骤
1. 断开Xcode调试会话测试
调试器附加到应用时,iOS可能会对后台应用采取更严格的终止策略。按以下步骤测试:
- 在Xcode中点击停止按钮终止调试会话,或直接拔掉iPhone与Mac的数据线
- 手动在真机上打开应用,切换到后台,等待10秒后返回
- 若此时应用未被终止,说明问题是调试器附加导致的正常行为,实际发布版不会出现此问题
2. 检查Info.plist配置
确认是否存在强制后台退出的配置:
- 打开项目的
Info.plist文件 - 查找
UIApplicationExitsOnSuspend键,若存在且值为YES,将其删除或改为NO - 该键默认不存在,若误添加会导致应用进入后台立刻终止
3. 检查后台模式配置
- 打开项目的
Signing & Capabilities标签页,查看Background Modes - 若未开启任何后台模式,保持现状即可;若开启了不需要的模式,可取消勾选(无后台任务需求时无需开启任何后台模式)
4. 验证Xcode Scheme设置
- 点击Xcode顶部的Scheme选择框,选择
Edit Scheme... - 进入
Run->Options标签页,确认没有勾选与后台终止相关的选项(如部分版本Xcode中的Terminate App After Entering Background)
补充说明
正常情况下,无后台权限的iOS应用进入后台后会先挂起而非立刻终止,短时间内返回可恢复状态。若以上步骤都排查后仍存在问题,可尝试:
- 更新Xcode到最新版本(当前14.3.1可升级至15.x版本)
- 重置iPhone的所有设置(设置->通用->传输或还原iPhone->还原->还原所有设置,不会删除数据)
内容的提问来源于stack exchange,提问作者Danilo
相关产品推荐
相关产品推荐

