【问题标题】:Trouble reading file in xcode command line app在 xcode 命令行应用程序中读取文件时遇到问题
【发布时间】:2020-08-23 19:31:38
【问题描述】:

我在 Xcode 11.6 的命令行工具项目中读取文件时遇到问题。

步骤:

使用 mac os 部分中的模板创建一个新的命令行工具项目。

在 main.swift 中:

import Foundation
let fileURL = URL( fileURLWithPath: "/Users/ausom4/Desktop/myTest.txt" )
var rawDataString: String
var errorString: String?

do {
  rawDataString = try String( contentsOf: fileURL, encoding: .utf8 )
  print(rawDataString)
} catch let error as NSError {
  errorString = error.description
  rawDataString = ""
  print(rawDataString)
}

这将在 Xcode 中成功构建,但总是会在控制台中打印一个空字符串。

但是,如果我在终端中转到我的产品位置并运行构建,我会得到文件的内容。

我没有启用沙盒。默认情况下,此 xcode 模板中也未启用沙盒。我还给了 xcode 完整的磁盘访问权限。

我可以在操场上运行这段代码。

这可能是什么问题?

【问题讨论】:

  • 调试问题的第一步是print(error) ...
  • 我收到以下错误:Error Domain=NSCocoaErrorDomain Code=257 “无法打开文件“myTest.txt”,因为您无权查看它。” UserInfo={NSFilePath=/Users/ausom4/Desktop/myTest.txt, NSUnderlyingError=0x1005425e0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not allowed"}} 我尝试给我的文件 chmod 777 权限,但返回相同的错误

标签: swift xcode


【解决方案1】:

它不是沙盒 - 它是 macOS 安全和隐私系统。

在第一次启动时,您必须收到提醒,询问类似“TestFileReading” would like to access files in your Desktop folder. 的内容,以便您获得此应用程序的访问权限。

如果您当时没有授予访问权限(或出于某种原因 macOS forgot 要求),则可以随时在系统偏好设置中手动授予访问权限:

所有这些都通过了,您的代码 sn-p 可以按预期工作 - 使用 Xcode 12 / macOS 10.15.6 进行测试

【讨论】:

  • 不幸的是,在运行项目以获取桌面权限时,我从未收到 xcode 的提示。我无法将新应用程序添加到文件和文件夹菜单,只有在解锁后才能将其删除。我正在使用 11.0 测试版。
猜你喜欢
  • 2017-10-07
  • 1970-01-01
  • 2015-02-19
  • 1970-01-01
  • 2012-09-28
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多