Read a file in a macOS Command Line Tool project

梦想与她 提交于 2019-12-10 01:54:49

问题


I've added a few JSON files to my macOS Command Line Tool project, but I can't seem to find them the usual way.

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") }

This code works absolutely fine when used in a View based application, but always prints "Could not find path" in the command line tool.

Does anyone know what I'm doing wrong?

P.S: Fully aware that I should be using guard statements for this, but the code isn't in a function, just faffing about in main.swift till I figure this out.


回答1:


There is no app bundle for a command-line tool. Just a binary.

You need to put the JSON file in a known location (current directory?) and construct the path yourself




回答2:


You can create a separate bundle, place the files there, and then load them without having to worry about their individual URLs.

Let's do it:

  1. In Xcode, click on File --> New --> Target...
  2. Click on the macOS tab at the top
  3. Scroll down to the Framework & Library, select Bundle, click Next. Give a name to the new bundle (let's say JSONMocks).
  4. Add files to this bundle. Add the file to Xcode, then make sure that the bundle is ticked in its target membership section:

  5. Add the bundle to your target. In the target's Build Phases, open the Copy Files phase and click the + button. Select the bundle and click Add:

  6. Programmatically access the contents of your bundle thus:

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")!


来源:https://stackoverflow.com/questions/43826866/read-a-file-in-a-macos-command-line-tool-project

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!