Bundle.main.path 找不到项目中添加的文本文件

Bundle.main.path does not find text file added in project

我在 Xcode 9 中有一个命令行项目,我正在尝试读取通过 "Add files to..." 添加到项目中的文本文件。我正在使用以下行来获取文件的路径:

guard let filePath = Bundle.main.path(forResource: "stops", ofType: "csv") else {
        fatalError("Cannot find CSV file")
    }

当我 运行 它时,它会打印出 fatalError 消息。我尝试在 "Copy Bundle Resources" 构建阶段添加文本文件。它仍然没有找到文件。

我做错了什么?

去年年初我遇到了同样的问题 - 这是我的解决方法(我必须强调这是一种解决方法,希望现在有另一种方法可以解决)

  1. 在您的项目中创建一个可用于访问数据的 Swift 文件(我的是 Recipe.swift
  2. 将您的 CSV 放入 xcode(忽略目标成员资格 - 只是为了方便(我的是 Recipe.json))
  3. 创建一个 运行 脚本阶段以将数据从 CSV 加载到 Swift class:

    set -e
    DATA=$(cat "./MyProject/recipe.json" | base64)
    echo "import Foundation" > "./MyProject/Recipe.swift"
    echo "class Recipe {" >> "./MyProject/Recipe.swift"
    echo "    static let data = \"$DATA\"" >> "./MyProject/Recipe.swift"
    echo "}" >> "./MyProject/Recipe.swift"
    

这会在您的 Swift 文件中生成一个 class,类似于:

import Foundation
    class Recipe {
        static let data = "..."
}

然后需要用的时候就可以解码Recipe.data

当然,这不是一个可扩展性很强的解决方案,我相信您可以通过使用延迟初始化、直接在生成的 class 中添加 base64 解码、在脚本中创建路径来使其变得更好相对于 $SRCROOT 等。这只是我的快速解决方案,让我可以继续处理项目的其余部分。

我的问题是我先创建了一个 ResponseJSON.swift,然后将其重命名为 ResponseJSON.json(更改为 .json 扩展名),但未被检测到。

解法:

  1. 删除文件的引用
  2. 在 Xcode
  3. 上再次添加
  4. 一边编译一边微笑着面对那些 Xcode 个错误 :)