Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
即使设置设置为“iOS11”也可以访问照片库;决不;_Ios_Swift_Xcode_Ios11 - Fatal编程技术网

即使设置设置为“iOS11”也可以访问照片库;决不;

即使设置设置为“iOS11”也可以访问照片库;决不;,ios,swift,xcode,ios11,Ios,Swift,Xcode,Ios11,即使我使用上述代码将“设置”中的照片访问权限设置为“从不”,我仍然可以显示图像选择器并显示照片。在显示之前,我将检查PHPhotoLibrary.authorizationStatus(),但我想知道这是预期行为吗?这是预期行为吗?-是 从文件中- 如果设备支持指定的源类型,则为true;如果指定的源类型不可用,则为false 它告诉您设备是否支持源类型,而应用程序是否具有访问它的权限 正如您在问题中已经提到的,PHPhotoLibrary.authorizationStatus()将是检查此问

即使我使用上述代码将“设置”中的照片访问权限设置为“从不”,我仍然可以显示图像选择器并显示照片。在显示之前,我将检查PHPhotoLibrary.authorizationStatus(),但我想知道这是预期行为吗?

这是预期行为吗?-是

从文件中-

如果设备支持指定的源类型,则为true;如果指定的源类型不可用,则为false

它告诉您设备是否支持源类型,而应用程序是否具有访问它的权限


正如您在问题中已经提到的,
PHPhotoLibrary.authorizationStatus()
将是检查此问题的正确方法。

这是预期行为吗?-是

从文件中-

如果设备支持指定的源类型,则为true;如果指定的源类型不可用,则为false

它告诉您设备是否支持源类型,而应用程序是否具有访问它的权限


正如您在问题中已经提到的,
PHPhotoLibrary.authorizationStatus()
将是检查此问题的正确方法。

UIImagePickerController和PHPhotoLibrary负责不同的区域

您应该同时检查:身份验证状态和源可用性

授权状态

有关应用程序访问用户照片的授权的信息 图书馆

是否资源类型可用

讨论

由于媒体源可能不存在或不可用
, 设备可能并不总是支持所有源类型

例如,如果 尝试从用户的库中拾取图像,但该库已关闭 如果为空,则此方法返回false。类似地,如果相机已经启动 在使用中,此方法返回false


UIImagePickerController和PHPhotoLibrary负责不同区域

您应该同时检查:身份验证状态和源可用性

授权状态

有关应用程序访问用户照片的授权的信息 图书馆

是否资源类型可用

讨论

由于媒体源可能不存在或不可用
, 设备可能并不总是支持所有源类型

例如,如果 尝试从用户的库中拾取图像,但该库已关闭 如果为空,则此方法返回false。类似地,如果相机已经启动 在使用中,此方法返回false

这种(新的)行为对我来说是合乎逻辑的,原因如下。使用
UIImagePickerController
时,您的应用程序实际上无法访问任何照片。当这种情况发生时,它只会看到用户选择的一个;如果用户在选择器中点击Cancel,应用程序将无法使用这些选项

PHPhotoLibrary
是一个单独的框架的一部分,在这个框架中,您可以使用用户的照片库执行许多操作,因此需要权限

因此,如果您只使用
UIImagePickerController
,我建议不要混用照片内容

免责声明:没有听说过苹果公司的任何官方声明。看起来很相关,也许我们会得到回复UPD:,同样的想法

此外,如果你够邪恶,理论上你可以在运行时摆弄
UIImagePickerController
查看层次结构,并检查用户在那里看到的任何东西。但这又是苹果需要处理的问题,我们应该友好:-)

这种(新的)行为对我来说是合乎逻辑的,原因如下。使用
UIImagePickerController
时,您的应用程序实际上无法访问任何照片。当这种情况发生时,它只会看到用户选择的一个;如果用户在选择器中点击Cancel,应用程序将无法使用这些选项

PHPhotoLibrary
是一个单独的框架的一部分,在这个框架中,您可以使用用户的照片库执行许多操作,因此需要权限

因此,如果您只使用
UIImagePickerController
,我建议不要混用照片内容

免责声明:没有听说过苹果公司的任何官方声明。看起来很相关,也许我们会得到回复UPD:,同样的想法


此外,如果你够邪恶,理论上你可以在运行时摆弄
UIImagePickerController
查看层次结构,并检查用户在那里看到的任何东西。但这又是苹果要处理的问题,我们应该很好:-)

好的,你可以从答案和评论中把这些拼凑起来,但要尝试讲述一个更完整的故事


在iOS 11中,
UIImagePickerController
作为独立于应用程序的进程运行。这意味着:

  • 你的应用程序看不到用户的整个照片库-它只能对用户在图像选择器中选择的任何资源进行只读访问
  • 由于(1),您的应用不需要标准隐私授权即可访问照片库。用户明确选择要在应用程序中使用的特定资产(或多个),这意味着用户正在授予应用程序读取相关资产的权限
  • 你可以看到更多关于这方面的信息

    (顺便说一句,这种模式与自iOS 9以来您看到的模式相匹配;如果您显示联系人选取器,您的应用程序只会一次性删除用户选取的联系人的联系人信息,而不需要对联系人数据库进行读/写访问,因此联系人选取器不需要特殊的隐私权限。)


    PHPhotoLibrary
    及其授权状态反映了用户可以通过设置>Pri控制的照片访问的全局读/写权限
    if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
        let imagePicker = UIImagePickerController()
        imagePicker.sourceType = .photoLibrary
        imagePicker.allowsEditing = true
        self.present(imagePicker, animated: true, completion: { })
    }