有没有办法知道我的 iOS 应用程序被隐私设置更改杀死了?

Posted

技术标签:

【中文标题】有没有办法知道我的 iOS 应用程序被隐私设置更改杀死了?【英文标题】:Is there a way to know my iOS app was killed by a privacy setting change? 【发布时间】:2014-05-21 05:35:03 【问题描述】:

我的 ios 应用需要访问图片的权限才能正常运行。

当我发现以下情况时,我正在测试我的应用如何响应隐私设置的更改:每次我转到“设置”应用并更改我的应用的隐私设置(打开或关闭)时,我的应用在没有任何警告的情况下被杀死。

我在设备的控制台中找到了这些日志:

Apr  8 15:01:50 iPad Preferences[5924] <Warning>: ########### Quitting application (xxx) in response to privacy settings change.
Apr  8 15:01:50 iPad com.apple.launchd[1] (UIKitApplication:xxx[0xc7cb][6039]) <Notice>: (UIKitApplication:com.edupad.itoochdev[0xc7cb]) Exited: Killed: 9
Apr  8 15:01:50 iPad backboardd[30] <Warning>: Application 'UIKitApplication:xxx[0xc7cb]' exited abnormally with signal 9: Killed: 9

虽然我在我的应用程序委托中实现了applicationWillTerminate:,但在应用程序被终止之前它似乎没有被调用。

我找不到任何相关文档,说明在我的应用程序被杀死之前我应该​​实施什么来获得通知。知道我能不能解决这个问题吗?

PS 1:我知道我可以实现applicationDidEnterBackground:,但我想在以下情况下提供不同的用户体验(A)用户刚刚快速切换到设置应用程序以更改隐私设置或(B)用户想要继续前进,一段时间后不会回到应用程序

PS 2:如果您正在测试这类事情,请不要在您的应用程序通过 Xcode 启动时执行此操作,否则您会因 sigkill 而崩溃。

【问题讨论】:

您必须始终期望您的应用在切换到后台后可能会被杀死。即使用户快速进入隐私设置,他们也可以记住其他内容,进入不同的应用程序,等等。因此,您唯一的可能性可能是检查在进入后台和前台之间花费了多少时间。 【参考方案1】:

通常情况下,如果您希望在应用被终止之前保存状态或清理代码,则需要定义块 beginBackgroundTaskWithExpirationHandler

您可以查看 Apple 的 WWDC 2012 文档,该文档讨论了从 iOS6 开始更改隐私设置时会发生什么。简而言之,它表示beginBackgroundTaskWithExpirationHandler 在发送 SIGKILL 之前被调用,因此您可以在那里处理清理代码。

还有另一个关于 Stack Overflow 的讨论。如果有人能找到它并在此处链接它会很有帮助。

【讨论】:

这在 iOS 10 中似乎不再适用

以上是关于有没有办法知道我的 iOS 应用程序被隐私设置更改杀死了?的主要内容,如果未能解决你的问题,请参考以下文章

更改日历隐私时 iOS 7 应用程序崩溃

iOS 设置(隐私 -> 定位服务 -> 选择我的应用 -> 更改允许访问)崩溃

iOS 使用新的隐私设置强制重启应用

在检测到隐私设置更改时让应用程序自行重启

有没有办法知道何时在 iOS 中删除了应用程序?

识别 iOS 10 中的隐私侵犯