首页 文章

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

提问于
浏览
-1

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

我正在使用以下代码段:

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

我的问题如下:

  • 这适用于 Playground

  • 这在我使用 Command Line Tool macOS应用程序模板时有效

  • 当我使用 Cocoa App macOS应用程序模板时,这会终止权限错误

权限错误如下:

致命错误:'试试!'表达式意外地引发了错误:错误Domain = NSCocoaErrorDomain Code = 257“无法打开文件”data.txt“,因为您没有权限查看它 . ” UserInfo = {NSFilePath = / my / path / data.txt,NSUnderlyingError = 0x60c0000449b0 }

我猜这与沙盒有关但我没有找到有关它的信息 .

  • 如何从沙盒应用程序中读取文件系统?我的意思是有很多GUI应用程序需要一个打开文件对话框,它不能真正限制沙盒应用程序不能从沙箱外读取文件 .

  • 或者,如何在Build Settings中关闭沙盒?

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

1 回答

  • 1

    你的子弹1:你有答案,你需要使用 NSOpenPanel 来获得用户访问该文件的权限 . 您可以使用 NSOpenPanel 方法将用户选择限制为取消按钮,只限制您希望的文件 - 从而创建一个"request access to"对话框 . 从Apple's App Sandbox Design Guide开始 .

    你的子弹2:你有正确的想法,只是错误的标签,你应该在摘要标签上找到沙盒开关 .

    HTH

相关问题