问题 当应用程序检测到隐私设置更改时自动重启


我有一个使用的应用程序 ALAssets 用于访问用户照片库的框架。我写了一些代码来检测应用程序是否有权访问照片库,如果没有,我会显示一条警告消息,告诉用户在设置中打开应用程序的位置服务。

问题是,当用户手动更改隐私设置然后重新打开应用程序时,iOS会强制应用程序与SIGKILL崩溃。

我注意到另一个应用程序处理此问题的方式是以某种方式检测隐私设置的更改,并强制应用程序在用户下次打开时重新启动。有谁知道怎么做到这一点?


6879
2018-04-10 15:55


起源



答案:


你误解了发生的事情。您的应用程序没有崩溃(尽管如果您使用调试程序运行应用程序,它可能会显示)。

当您切换到“设置”应用程序(并且您的应用程序在后台暂停)并更改隐私设置时,已终止的应用程序将被终止。当您切换回应用程序时,它会再次启动。这与您的应用程序因任何其他原因被杀死没有什么不同。

您可以通过恢复以前的状态来编写应用程序来处理此问题。您谈到的另一个应用程序只是将用户返回到先前的状态。许多应用都这样做。它与因隐私变化而被杀无关。应用程序将在因任何原因被杀死时恢复状态。


12
2018-04-10 16:04



谢谢。当我从xCode运行应用程序时,就像你说的那样,它似乎很冷。但是,当我刚从手机上运行应用程序,然后更改设置时,应用程序会在下次启动而不是冻结时重新启动。 - Ser Pounce
这是模拟器特有的吗?我尝试更改设备上的Twitter访问权限,但这并没有导致我的Twitter应用程序被杀死。它像往常一样从背景中回来。 - nevan king
@CoDEFRo通过Xcode调试时,您需要在应用程序崩溃后单击“停止”按钮,然后才能正确重新启动应用程序。 - rmaddy
对...在这种情况下,它会冻结,因为iOS试图重新启动它,但它仍然连接到调试器。再次感谢! - Ser Pounce
@rmaddy请添加Apple文档 - evya


答案:


你误解了发生的事情。您的应用程序没有崩溃(尽管如果您使用调试程序运行应用程序,它可能会显示)。

当您切换到“设置”应用程序(并且您的应用程序在后台暂停)并更改隐私设置时,已终止的应用程序将被终止。当您切换回应用程序时,它会再次启动。这与您的应用程序因任何其他原因被杀死没有什么不同。

您可以通过恢复以前的状态来编写应用程序来处理此问题。您谈到的另一个应用程序只是将用户返回到先前的状态。许多应用都这样做。它与因隐私变化而被杀无关。应用程序将在因任何原因被杀死时恢复状态。


12
2018-04-10 16:04



谢谢。当我从xCode运行应用程序时,就像你说的那样,它似乎很冷。但是,当我刚从手机上运行应用程序,然后更改设置时,应用程序会在下次启动而不是冻结时重新启动。 - Ser Pounce
这是模拟器特有的吗?我尝试更改设备上的Twitter访问权限,但这并没有导致我的Twitter应用程序被杀死。它像往常一样从背景中回来。 - nevan king
@CoDEFRo通过Xcode调试时,您需要在应用程序崩溃后单击“停止”按钮,然后才能正确重新启动应用程序。 - rmaddy
对...在这种情况下,它会冻结,因为iOS试图重新启动它,但它仍然连接到调试器。再次感谢! - Ser Pounce
@rmaddy请添加Apple文档 - evya


您可以使用以下网址检查您是否有权访问照片库 authorizationStatus 类方法 的 ALAssetsLibrary。您应该在每次应用“打开”时调用的某种方法中检查此值,并相应地更新您的UI。


1
2018-04-10 15:59



这正是我正在做的事情,当我发现它时,如果它没有被授权,我告诉用户在设置应用程序中更改它。当他们去更改它时,应用程序崩溃了。 - Ser Pounce
你能发布崩溃的方法的代码吗? - bdesham
它实际上并不是我的代码中崩溃我的应用程序的方法。当用户更改应用程序外部的设置时,iOS会崩溃该应用程序。这解释了它: stackoverflow.com/questions/12652502/... - Ser Pounce