无法复制,因为您无权访问 ios 中的应用程序包

Posted

技术标签:

【中文标题】无法复制,因为您无权访问 ios 中的应用程序包【英文标题】:couldn’t be copied because you don’t have permission to access application bundle in ios 【发布时间】:2017-02-10 05:57:32 【问题描述】:

当我将文件从文档目录复制到应用程序包目录时,它会给出如下错误:

无法复制“图片”,因为您没有访问“资源”的权限。

我的代码

let fileManager = FileManager.default
let documentDirectoryPath = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first?.appendingPathComponent("Images")
let bundleDirectoryPath = (Bundle.main.resourceURL?.appendingPathComponent("GCDWebUploader.bundle").appendingPathComponent("Contents").appendingPathComponent("Resources").appendingPathComponent("Images"))

do 
        try fileManager.copyItem(at: documentDirectoryPath!, to: bundleDirectoryPath!)
     catch let error as NSError 
        print("Couldn't copy file to final location! Error:\(error.description)")
    

【问题讨论】:

为什么要将图像移动到捆绑目录? 我已经使用 GCDWebUploader 实现了简单的网络服务器。它成功完成了。但是现在我想显示从 iphone 上传到网络的图像。当时我遇到了资源未找到的问题。所以对于我得到了复制资源的解决方案。但是这样做我得到了许可问题。 这是否意味着您的文档目录中有一张图片要上传到外部服务器(使用 GCDWebUploader)?如果是这样,你为什么不显示你的上传代码,你是如何从沙箱访问图像的? 你知道 GCDWebServer 吗?看这个***.com/questions/29345909/what-is-gcdwebserver-for 是的,我已经在 GCDWebUploader Github 问题中提出了问题。谢谢。 【参考方案1】:

为什么要复制到 Bundle Dirctory.. 无法在 bundle 目录中写入,因为 bundle dir 是用 SSL certificate 签名的代码,你不能破坏它。您可以使用文档目录本身来存储文件。

【讨论】:

【参考方案2】:

磁盘上的捆绑目录(读取here)是不可变的代码,即开发人员无法更改其内容。应用程序的文档目录(沙箱)是您要保存内容的地方。

【讨论】:

【参考方案3】:

如果您想将任何文件添加到捆绑目录中,则必须在构建时使用构建阶段选项卡中的复制资源来完成。这些通常是不应在每次执行时更改的文件。

如果您尝试添加到捆绑包中的图像用于 UI。使用资产目录

对于任何其他类型的文件(读取或写入),请使用文档目录

【讨论】:

以上是关于无法复制,因为您无权访问 ios 中的应用程序包的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 9.4 无法打开文件“my_app”,因为您无权查看它

“无法安装应用程序。测试人员无权访问此应用程序。” TestFlight iOS 应用程序中的错误

将文件复制到我无权访问的网络共享

从您无法控制且无权访问的线程中释放 Python 导入锁

xcode 12:无法打开文件“app name”,因为您无权查看它

MacOS XAMPP 访问禁止错误 403 - 您无权访问请求的目录