在macOS命令行工具项目中读取文件

时间:2017-05-07 01:07:37

标签: swift xcode bundle command-line-tool

我已经在我的macOS命令行工具项目中添加了一些JSON文件,但我似乎无法通常的方式找到它们。

if let path = Bundle.main.path(forResource: "Data", ofType: "json")
{
    if let contents = try? String(contentsOfFile: path)
    {
        print (contents)
    }
    else { print("Could not load contents of file") }
}
else { print("Could not find path") }

此代码在基于视图的应用程序中使用时非常正常,但始终打印"无法找到路径"在命令行工具中。

有谁知道我做错了什么?

P.S:完全清楚我应该使用guard语句,但代码不在函数中,只是在main.swift中讨论,直到我弄清楚这一点。

2 个答案:

答案 0 :(得分:8)

命令行工具没有应用包。只是二进制。

您需要将JSON文件放在已知位置(当前目录?)并自己构建路径

答案 1 :(得分:0)

您可以创建一个单独的捆绑包,将文件放在此处,然后加载它们,而不必担心它们的单独URL。

让我们这样做:

  1. 在Xcode中,点击文件->新建->目标...
  2. 点击顶部的 macOS 标签
  3. 向下滚动到框架和库,选择捆绑包,然后单击“下一步”。为新的捆绑包起个名字(假设JSONMocks)。
  4. 将文件添加到此捆绑包。将文件添加到Xcode,然后确保在其目标成员资格部分中选中该软件包:

    target membership for file in bundle

  5. 将捆绑包添加到目标中。在目标的构建阶段,打开复制文件阶段,然后单击+按钮。选择捆绑包,然后点击添加

    enter image description here

  6. 以编程方式访问软件包的内容,因此:

let currentDirectoryURL = URL(fileURLWithPath: FileManager.default.currentDirectoryPath)
let bundleURL = URL(fileURLWithPath: "JSONMocks.bundle", relativeTo: currentDirectoryURL)
let bundle = Bundle(url: bundleURL)
let jsonFileURL = bundle!.url(forResource: jsonFileName, withExtension: "json")!