无法在 Xcode 12 项目中找到 *.json 文件

Could not find a *.json file inside an Xcode 12 project

我是第一次同时尝试 Swift (5.3) 和 Xcode (12)。任务是解析附近已存在的 *.json 文件。

老实说,在Xcode项目中添加文件比实际解析它更棘手:无论我把它放在哪里,总是找不到。 This answer didn't help, because there's no Target Membership section in File Inspector(我猜,它在 Xcode 12 中被重命名或移动到其他地方;也许我错了;无论如何,也找不到它)。

我还注意到,在创建新的 Project 与新的 Swift Package[ 时,Target Membership 部分的行为有所不同。如果它是一个项目,则会显示 Target Membership。由于我已经创建了一个包,因此我无法使用此部分。

有人可以帮助我了解这里发生了什么吗?


我不知道这是怎么回事,我不知道我到底应该做什么才能“在目标中添加新成员”,我不知道目标和产品是什么,并且我很沮丧,因为在 Xcode 中添加文件需要 很大的努力。

在 Swift 5.3 中,包可以添加和处理非代码资源。但是,Package.swift 必须明确定义它们。通过将资源添加到目标来执行此操作:

targets: [
  .target(
    name: "TryParseJSON",
    resources: [
      .copy("persons.json")
    ]
  )
]

这会将其复制到 Bundle 中,希望在正确的位置。如果没有,可能需要额外的配置。

请注意,路径是相对于包含目标源的目录的。 Apple 建议在您的源目录中创建一个名为 Resources 的子目录。如果你这样做,你需要

      .copy("Resources/persons.json")

此外,确保 Package.swift 在顶部定义 Swift 工具 5.3,如下所示:

// swift-tools-version:5.3

当您需要访问文件时,您如何尝试提取文件的 URL 也很重要。根据 Apple docs,您必须始终使用 Bundle.module.url(forResource:,withExtension:) 来获取资源的 URL。所以,在上面的例子中使用

guard let resourceUrl = Bundle.module.url(forResource: "persons",withExtension: "json")
else { /* fail */ }