我需要访问iOS应用程序容器以外的目录。
我尝试的最小代码如下所示。
let files = try! FileManager.default.contentsOfDirectory(atPath: "/Library/")
我还将以下内容添加到权利文件(. entitles)中
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.temporary-exception.files.absolute-path.read-write
com.apple.security.temporary-exception.files.absolute-path.read-write
</key>
<string>/</string>
</dict>
</plist>
我以为上面会给我的应用程序足够的权限浏览应用程序容器外的文件,但我仍然得到以下错误。
[file:///库/]字典加载程序/内容视图。swift:54:致命错误:"try!"表达式意外引发错误:错误域= NSCocoaErrorDomain代码= 257无法打开文件"库",因为您没有查看该文件的权限。用户信息= {NSUserStringVariant =(文件夹),NSFilePath =/Library/,NSUnderlyingError = 0x282c275d0 {错误域= NSPOSIXErrorDomain代码= 1 "不允许的操作"}} 2023 - 02 - 15 12:03:48.780396 - 0800字典加载器[1132:24964]字典加载器/内容视图。swift:54:致命错误:"try!"表达式意外引发错误:错误域= NSCocoaErrorDomain代码= 257 "无法打开文件"库",因为你没有查看该文件的权限。用户信息= {NSUserStringVariant =(文件夹),NSFilePath =/Library/,NSUnderlyingError = 0x282c275d0 {错误域= NSPOSIXErrorDomain代码= 1"不允许的操作"}}
如果有什么不同的话,这是在真实设备上测试的(安装iOS 16. 2的iPhone 12)
3条答案
按热度按时间m3eecexj1#
由于Apple对您的应用设置的限制(称为应用沙盒),您无法访问沙盒容器之外的内容以访问本地设备上的其他文件。
只有这些高度受信任的组件才具有此类权限。这些组件位于in this online database
在权利文件中为自己提供权利并不实际为您提供该权利。
特权的工作方式是,在App Store Connect上,您可以向App ID添加额外的特权,然后生成一个预置配置文件,该配置文件引用App ID和授权以及证书。Xcode可以为您自动执行此操作。
但是你不能给予自己在App Store Connect中寻求的特权,Xcode也不会将这些特权添加到你的App ID中,并为你进行代码签名。
有时候苹果会给予你特权,但你需要通过苹果开发者技术支持来获得这些特权。例如,如果你代表卫生当局,你可以获得暴露通知权利。但苹果DTS永远不会提供你所要求的。
唯一的解决办法是某些特殊情况,通常不适用于您作为一个普通的开发人员:
你所描述的那种探索也许可以通过使用虚拟化的iPhone来进行。Corellium提供了一种商业产品。
myss37ts2#
com.apple.security.temporary-exception.files.*
是仅适用于macOS的与应用程序沙盒相关的键。【注】本章介绍macOS应用程序沙盒实现特有的属性列表键,它们在iOS中不可用。
您尝试执行的操作在iOS上是不允许的。您需要重新设计以使您不需要此功能,或者您需要越狱设备。
vfh0ocws3#
在简单语言-你不能访问你的应用程序目录以外的文件,但如果你想访问文件,例如,当我创建聊天应用程序时,当我发送照片从目录首先我必须复制照片到我的应用程序目录前进,它是很容易访问给你。
iOS标准目录:文件所在位置出于安全考虑,iOS应用与文件系统的交互仅限于应用沙盒目录内的目录。在安装新应用期间,安装程序会在沙盒目录内为应用创建多个容器目录。每个容器目录都具有特定角色。捆绑包容器目录包含应用的捆绑包、而数据容器目录保存应用和用户的数据。数据容器目录进一步分为多个子目录,应用可使用这些子目录对其数据进行排序和组织。应用还可以在运行时请求访问其他容器目录,例如iCloud容器。