【发布时间】:2016-11-20 05:16:30
【问题描述】:
我正在尝试在 Xcode (8 beta 2) 的命令行工具中获取资源的路径。这是我得到的:
- 资源 file.xyz 已被拖入项目,并且目标成员资格与主项目匹配。
- 在构建阶段 -> 复制文件下,目标设置为“资源”并且子路径为空。 “仅在安装时复制”未选中,file.xyz 列在下表中。
-
在我的 main.swift 文件中,我有以下代码:
guard let filePath = Bundle.pathForResource("file", ofType: "xyz", inDirectory: "Resources") else{ fatalError("Could not find file") }
fatalError 每次都会触发。有任何想法吗?我知道命令行工具没有应用程序包,这就是为什么将资源复制到 Resources 文件夹中的原因,但我的 inDirectory 参数有点疯狂……感谢阅读。
编辑:我的主要目标是从 CLT 访问资源文件(在本例中为文本文件)——我不喜欢这种特定的方式,所以如果有另一种方法也很好!
【问题讨论】:
-
由于 CLI 没有捆绑包(
Bundle.main()是nil!),文件夹Resources应该从哪里来,或者该文件夹应该位于哪里?参数inDirectory指定包中Resources文件夹的有效子文件夹。 -
@vadian 感谢您的评论。在阅读 capikaw 的评论后,我最终选择了这个方向:stackoverflow.com/a/3950218/1781058,他说 Bundle 仍然可以用于链接 CLT 目标中的文件。
-
可以链接要编译的文件,甚至可以嵌入文件,但不能通过
(NS)Bundle访问文件 -
命令行工具做使用
Bundle结构:换句话说,Bundle.main为包含命令行可执行文件的目录返回一个有效的包。Bundle.main.resourceURL返回父目录的 url。Bundle.main.pathForResource("file", ofType:"xyz")将返回一个有效路径,前提是file.xyz被复制到与命令行工具相同的目录中。 -
@NSGod 对我来说,
Bundle.main和Bundle.main.resourceURL给出了包含命令行二进制文件的目录。我不确定如何访问其他文件。
标签: swift xcode command-line