50

我的 iOS 应用程序使用ALAssetsLibrary. 当我更改应用程序的隐私设置(设置→隐私→照片)时,该应用程序被系统(SIGKILL)杀死。这是一个错误吗?

4

6 回答 6

37

我认为这是一个错误,或者至少是记录不充分的意外行为。但它不会崩溃,只是被迫重新启动。您将收到一条 SIGKILL 消息,但没有崩溃日志。

如果您是注册的苹果开发者,您可以查看他们的论坛以了解有关此问题的讨论

我不知道如何防止这种行为,但随时向苹果提交错误报告。据传他们使用错误重复作为衡量错误严重程度的一种方式。也许您可以存储您的应用程序状态,以便在重新启动时恢复它。

于 2012-10-17T16:11:41.720 回答
10

使用 UIImagePickerController 时也会发生这种情况。顺序是这样的:

  1. 你展示了 UIImagePickerController。第一次,小警报要求用户允许使用照片库。假设用户说不。

  2. 此时用户对选择器控制器所能做的就是取消,所以我们假设这就是发生的事情。

  3. 稍后,您会显示 UIImagePickerController。它现在包含一条不可自定义的消息,说明无法访问照片库,但用户可以在“设置”中启用访问权限。

  4. 用户切换到设置并允许访问此应用的照片库。

  5. 应用程序在后台崩溃。用户是取消了选择器还是让它显示都没有关系。

我已经为此提交了一个错误,我建议您根据您的情况也这样做。Apple 在 iOS 6 中引入了一个新的隐私系统,显然问题还没有解决。

于 2012-12-01T17:50:11.717 回答
8

在此 PDF 中搜索“kill”一词:http: //adcdownload.apple.com/wwdc_2012/wwdc_2012_session_pdfs/session_710__privacy_support_in_ios_and_os_x.pdf

当某些权限发生变化时,iOS 会终止应用程序。

这个信息很难追踪。它不在任何“指南”中(例如,偏好编程指南)。

于 2015-11-23T17:47:15.127 回答
2

当您使用模拟器测试您的应用程序时。更改应用程序的权限会给您一个断点。您可以在控制台中键入“c”以使应用程序继续运行并恢复到原始状态。但是在您的真实设备中,不是故事。它只是重新启动应用程序。

于 2015-11-30T03:25:18.017 回答
1

有时 SIGKILL 错误作为中断错误工作,它向 iOS 发出信号,表明您必须重新启动您的应用程序,同时我们正在管理应用程序任务,并且在该实例上,应用程序不处理发送中断消息的方式。

在我的情况下.....我不允许在应用程序中访问照片和相机,每当我允许访问这些功能时,我都会最小化应用程序并启用这些设置。当我启用这些时,iOS 会中断,应用程序会收到此中断,但无法处理并导致我们的应用程序终止或关闭。

于 2015-11-14T10:01:41.397 回答
0

好的,我第一次写答案。我希望我做对了:)

您是否使用assetForURL:resultBlock:failureBlock: 访问资源库?

如果是这样,很可能您没有处理 ALAssetLibrary 的故障块。

你可以做类似的事情

ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *error)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Access to Photo Library is Denied "
                                                            message:@"Please allow <YOUR APP NAME> to access your Photo library from Privacy Settings"
                                                           delegate:nil
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
            [alert show];
            [alert release];
}

因此,当您的应用无法访问照片库时,它会要求用户这样做。

于 2012-10-14T14:26:59.943 回答