我的 iOS 应用程序使用
ALAssetsLibrary
访问用户的照片。当我更改应用程序的隐私设置(设置→隐私→照片)时,该应用程序被系统杀死(SIGKILL
)。这是一个错误吗?
我认为这是一个错误,或者至少是记录不足和意外的行为。但它不会崩溃,只是强制重新启动。您将收到 SIGKILL 消息,但没有崩溃日志。
如果您是注册的苹果开发者,您可以查看他们的论坛以获取有关此问题的讨论。 这是一个。
我不知道如何防止这种行为,但请随时向苹果提交错误报告。有传言称他们使用错误重复作为衡量错误严重性的方法。 也许您可以存储应用程序状态,以便在重新启动时恢复它。
使用 UIImagePickerController 时也会发生这种情况。顺序是这样的:
您将显示 UIImagePickerController。第一次,小警报会询问用户使用照片库的权限。假设用户拒绝。
用户此时可以使用选择器控制器执行的操作就是取消,所以我们假设这就是发生的情况。
稍后,您会显示 UIImagePickerController。它现在包含一条不可自定义的消息,表示无法访问照片库,但用户可以在“设置”中启用访问权限。
用户切换到“设置”并启用对此应用程序的照片库的访问。
应用程序在后台崩溃。用户是否取消选择器或让它显示并不重要。
我已就此提交了一个错误,我建议您根据您的情况也这样做。苹果在 iOS 6 中引入了新的隐私系统,显然这些问题还没有得到解决。
在此 PDF 中搜索“kill”一词: http://adcdownload.apple.com/wwdc_2012/wwdc_2012_session_pdfs/session_710__privacy_support_in_ios_and_os_x.pdf
当某些权限发生更改时,iOS 会终止应用程序。
此信息很难追踪。它不在任何“指南”中(例如,首选项编程指南)。
当您使用模拟器测试您的应用程序时。更改应用程序的权限会给您一个断点。您可以在控制台中键入“c”以使应用程序继续运行并返回到原始状态。但在您的真实设备中,这不是故事。它只是重新启动应用程序。
有时 SIGKILL 错误作为中断错误,它向 iOS 发出信号,表明您必须重新启动应用程序,同时我们正在管理应用程序任务,在这种情况下,应用程序不处理发送中断消息的方式。
就我而言......我不允许在应用程序中访问照片和相机,每当我允许访问这些功能时,我都会最小化应用程序并启用这些设置。当我启用这些功能时,iOS 会遇到中断,应用程序会收到此中断,但无法处理并导致我们的应用程序终止或关闭。
您是否使用
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];
}
因此,当您的应用程序无法访问照片库时,它会要求用户访问照片库。
我不确定这会有多大帮助,但我遇到了类似的问题,当我通过隐私设置(设置→隐私→蓝牙)关闭/打开蓝牙时应用程序崩溃,但当我更改时它不会崩溃直接蓝牙设置(设置→蓝牙),所以我认为这里可以说两件事。
我也在寻找如何预防它的解决方案,所以现在只是分享一下原因可能在哪里的见解,但希望它可以得到解决!谢谢!