新的Xcode项目拒绝了自己的文件读取权限



我试图在Xcode应用程序中读取文件,该文件属于该应用程序,而不是项目目录外的一些用户文件。我已经将问题减少到最简单的情况,如下所示,使用ContentView源文件作为我试图访问的文件。

我创建了一个新的多平台Xcode项目(称为read)它打开显示ContentView文件,我通过用printFile()替换"Hello, World!"也包括printFile()定义来编辑。ContentView变成了:
import SwiftUI
func printFile() -> String {
do {
return try String(contentsOfFile: "/Users/my_username/read/read/ContentView.swift")
} catch {
return error.localizedDescription
}
}
struct ContentView: View {
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundColor(.accentColor)
Text(printFile())
}
.padding()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}

我运行项目,窗口打开,显示本地化错误描述

文件"ContentView.swift"无法打开,因为您没有权限查看它。

我已经从重复的问题中尝试了解决方案(例如这里)。点:

  1. 这个项目中没有plist文件
  2. 我已经授予Xcode全盘访问权限。
  3. C/c++/objective编译器"已经是"默认编译器(apple clang)。">
  4. 我在项目中没有改变任何东西,除了上面描述的ContentView文件。
  5. 我在我的Mac上运行这个多平台应用程序。
  6. startAccessingSecurityScopedResource不应该是必要的,因为我甚至没有在"标准位置"访问文件,而只是在项目本身。

那么一个项目如何读取自己的项目文件(如数据库,配置等)?行为是否高于预期行为?

如果有问题的文件是应用程序包中的资源(如文本文件)(因为它是应用程序目标的一部分),您可以通过Bundle.mainurl(forResource:...)读取它。

如果不是,那么在没有完全磁盘访问或关闭沙箱的情况下,您无法将其作为固定位置的任意文件读取。

请注意,.swift文件是应用程序的源文件,而不是应用程序中的;被编译成形成应用程序的可执行文件,这是不可读的。

最新更新