当前位置: 首页 > 面试题库 >

即使将设置设置为“从不”,也可以访问iOS11照片库

邬良才
2023-03-14
问题内容
if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
    let imagePicker = UIImagePickerController()
    imagePicker.sourceType = .photoLibrary
    imagePicker.allowsEditing = true
    self.present(imagePicker, animated: true, completion: { })
}

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


问题答案:

好的,您可以将答案和评论中的一部分拼凑起来,但要尝试讲出更完整的故事…

在iOS 11中,UIImagePickerController与应用程序分开运行。这意味着:

  1. 您的应用看不到用户的整个照片库-它仅对用户在图像选择器中选择的任何资产都具有只读访问权限。
  2. 由于(1),您的应用不需要标准的隐私授权即可访问照片库。用户明确选择了一个(或多个)特定资产供您的应用程序使用,这意味着该用户已授予您的应用程序权限以读取相关资产。

您可以在PhotoKit的WWDC17演讲中看到有关此内容的更多信息。

(顺便说一下,此模型与您自iOS
9以来在Contacts框架中看到的模型匹配;如果显示联系人选择器,则您的应用只会获得用户选择的联系人的一次性联系信息,而不会对联系人数据库的持续读写访问权限,因此联系人选择器不需要特殊的隐私权限。)

PHPhotoLibrary其授权状态反映了用户可以从“设置”>“隐私”中控制的“照片”访问权限的全局读/写权限。(这就是您的Info.plist所需要的NSPhotoLibraryUsageDescription。)对该PHPhotoLibraryAPI的任何使用都需要此权限,无论您的应用对该API的使用是仅用于写入还是仅用于读取。自从iOS
8中引入PhotoKit以来,这就是事实。

如果您未使用PHPhotoLibraryPHAsset等,则iOS 11中新增了一些较窄的权限选项(并且不属于Photos.framework
API):

  • 如上所述,UIImagePickerController不需要全面的“隐私设置”权限,因为每次使用都会授予对所选特定资产的一次性读取访问权限。
  • 如果您只需要向照片库添加新资产,请使用UIImageWriteToSavedPhotosAlbumUISaveVideoAtPathToSavedPhotosAlbum。使用这些内容,您可以将它们放入NSPhotoLibraryAddUsageDescriptionInfo.plist中-然后,系统的“隐私设置”将向用户表明,他们不授予您查看或修改现有资产的权限,而只是添加新资产。

如果用户授予仅添加权限,则该权限仅适用于那些UIKit函数-
尝试使用PHPhotoLibrary仍将提示(并要求使用Info.plist键)读/写访问权限。

有关仅添加隐私设置的更多信息,请参见WWDC17讨论的这一部分。



 类似资料:
  • 问题内容: 我知道可以偏斜,但我看不到以特定角度偏斜每个角的方法。 这是我正在从事的项目: 专门查看菜单中的标签。现在,我正在使用图像,我想针对功能强大的浏览器进行更改。 我知道可以创建CSS trapazoid,但是使用没有内容的边框。最终结果还需要一些圆角。 问题答案: 这可能是一个大概的想法:

  • 问题内容: 我正在尝试对Spring 3.1 的注释支持,并且想知道是否有任何方法可以通过设置TTL在一段时间后清除缓存的数据?现在,从我看到的内容中,我需要使用和自己清除它,并与我一起使用可以实现TTL实现,但是对于这样一个简单的任务来说似乎有点多了吗? 问题答案: 如何设置TTL / TTI /驱逐策略/ XXX功能? 直接通过你的缓存提供程序。缓存抽象是…好吧,抽象不是缓存实现 因此,如果你

  • 我已经安装了我的jdk文件。我还在用户变量和系统变量的高级设置中设置了我的路径。当我试图通过javac编译我的程序时filename.java命令提示符显示javac不被识别为内部或外部命令。我再次设定了我的道路,但问题仍然是一样的

  • 我安装了Java JDK,然后在高级设置中设置了系统环境的路径,但在命令提示符中仍然无法识别。。 这是截图

  • 问题内容: 我正在使用创建时间选择器。内的文字是可编辑的。但我想将设置为不可编辑,因为有机会给出无效的值。谁能帮我? 问题答案: 请尝试以下操作: 只要您自己没有通过调用更改微调器编辑器,此方法就应该起作用。 告诉我们这是否有帮助。

  • 我很好奇是否可以将iOS设置(例如位置/图片)重置为默认设置,这样用户每次都会被问到是否允许位置或相机使用。 目前,我正在尝试用Ionic/Cordova做这件事。 也许你们中有人知道怎么做,或者能告诉我这是不是可能的。