当前位置: 首页 > 知识库问答 >
问题:

macOS沙箱上的Swift文件读取权限错误

宗建章
2023-03-14

我正在尝试在macOS Swift应用程序(Xcode 9/Swift 4)中读取文件系统上文件的内容。

我正在使用以下代码片段:

let path = "/my/path/string.txt"
let s = try! String(contentsOfFile: path)
print(s)

我的问题是:

    < li >这在操场上行得通 < li >这在我使用命令行工具macOS应用程序模板时有效 < li >当我使用Cocoa App macOS应用程序模板时,这将导致权限错误

权限错误如下:

致命错误:“尝试!”表达式意外引发了一个错误:

错误域=NSCocoa错误域代码=257 “无法打开文件'data.txt,因为您没有查看它的权限。

UserInfo={NSFilePath=/my/path/data.txt, NSSublyingError=0x60c0000449b0{Error Domain=NSPOSIXError Domain Code=1"不允许操作"}}

我想这与沙盒有关,但我没有找到任何相关信息。

> < li>

如何在沙盒应用程序中读取文件系统?我的意思是有如此多的GUI应用程序需要一个打开文件的对话框,沙盒应用程序不能从沙盒外部读取文件是一个现实的限制。

或者,如何在构建设置中关闭沙箱?

最后,我试图比较默认的Cocoa应用程序和命令行工具模板之间的< code>project.pbxproj文件,我没有看到任何有意义的差异,比如关于安全性或沙盒的内容。如果不在这里,这些设置存储在哪里?

共有1个答案

柴华灿
2023-03-14

您的要点1:您得到了答案,您需要使用NSOpenPanel获得用户访问文件的权限。您可以使用NSOpenPanel方法将用户的选择限制在取消按钮和您想要的文件上,从而生成“请求访问”对话框。从苹果的应用程序沙盒设计指南开始。

你的要点2:你有正确的想法,只是错误的选项卡,你应该在摘要选项卡上找到沙盒开关。

呵呵

 类似资料:
  • 安全是Chromium最重要的目标之一。安全的关键在于理解下面这点:在我们完整地理解了系统在所有可能的输入组合下表现出的行为之后,我们才能够真的保证系统安全。对于像Chromium这样庞大而多样化的代码库,推理它的各个部分可能的行为的组合几乎是不可能的。沙箱的目标是提供这样一种保证:不论输入什么,保证一段代码最终能或不能做的事情。 沙盒利用操作系统提供的安全性,允许不能对计算机做出持久性改变或者访

  • Jinja2 沙箱用于为不信任的代码求值。访问不安全的属性和方法是被禁止的。 假定在默认配置中 env 是一个 SandboxedEnvironment 实例,下面的代码展示 了它如何工作: >>> env.from_string("{{ func.func_code }}").render(func=lambda:None) u'' >>> env.from_string("{{ func.fu

  • Jinja2 沙箱用于为不信任的代码求值。访问不安全的属性和方法是被禁止的。 假定在默认配置中 env 是一个 SandboxedEnvironment 实例,下面的代码展示 了它如何工作: >>> env.from_string("{{ func.func_code }}").render(func=lambda:None) u&"" title="jinja2.sandbox.Security

  • 我正在沙箱模式下运行PayPals Payflow服务(或者至少尝试)。当我拨打电话时,我只得到以下信息: 我传递的不是信用卡数据,我传递的是带有银行路由信息的ACH数据。 PayPal称: 无效的主机映射。您正在尝试处理一种投标类型(如发现卡),但您的商户银行未将您设置为接受这种类型的卡。 有没有人知道我如何在PayPal Payflow中启用一个沙箱来启用ACH测试?这个帐户永远不会用于任何东

  • Swift 5.x 权限控制 模块和源文件 模块指的是独立的代码分发单元, 框架或应用程序会作为一个独立的模块来构建和发布.在Swift中, 一个模块可以使用import关键字导入另外一个模块. 源文件就是Swift中的源代码文件, 它通常属于一个模块, 即一个应用程序或者框架. 尽管我们一般会将不同的类型分别定义在不同的源文件中, 但是同一个源文件也可以包含多个类型、函数之类的定义. 访问级别

  • 问题内容: 说一些程序员给了我一个可执行的jar(来自Java代码)以及要使用的入口点。我想在没有网络或文件系统访问权限或数据库访问权限以及固定数量的CPU和内存的受限沙箱环境中从Java代码运行(以编程方式)此jar。即,Java代码不应对在我的jvm上运行的其他程序造成任何副作用。 理想情况下,我希望根据情况允许某些访问(例如,仅允许访问具有配额的某个目录中的文件)。 问题答案: 您可以使用策