我试图在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"无法打开,因为您没有权限查看它。
我已经从重复的问题中尝试了解决方案(例如这里)。点:
- 这个项目中没有plist文件
- 我已经授予Xcode全盘访问权限。
- C/c++/objective编译器"已经是"默认编译器(apple clang)。"> 我在项目中没有改变任何东西,除了上面描述的
- 我在我的Mac上运行这个多平台应用程序。
startAccessingSecurityScopedResource
不应该是必要的,因为我甚至没有在"标准位置"访问文件,而只是在项目本身。
ContentView
文件。那么一个项目如何读取自己的项目文件(如数据库,配置等)?行为是否高于预期行为?
如果有问题的文件是应用程序包中的资源(如文本文件)(因为它是应用程序目标的一部分),您可以通过Bundle.main
和url(forResource:...)
读取它。
如果不是,那么在没有完全磁盘访问或关闭沙箱的情况下,您无法将其作为固定位置的任意文件读取。
请注意,.swift
文件是应用程序的源文件,而不是应用程序中的;被编译成形成应用程序的可执行文件,这是不可读的。