使用命令行工具从 Xcode 复制文件

Posted

技术标签:

【中文标题】使用命令行工具从 Xcode 复制文件【英文标题】:Copying Files From Xcode With Command Line Tool 【发布时间】:2018-08-08 00:01:35 【问题描述】:

我正在开发 Xcode 中的命令行工具。我面临的挑战如下:如果文件在我期望的位置不存在,例如/Path/To/The.File,如果已将The.File 的副本添加到项目资源中,如何将其复制到/Path/To/The.File

对于一个 MacOS 应用程序项目,我相信我已经成功使用了类似于以下内容的方法来获取文件路径:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"The" ofType:@"File"];

有了文件路径,我就可以执行代码将文件从文件路径复制到预期的位置/Path/To/The.File

是否可以使用 Xcode 中的命令行工具来完成此操作?

【问题讨论】:

没有。命令行工具不是捆绑包。它不能“包含”文件。 【参考方案1】:

我能够使用 Makefile “嵌入”资源 The.File

在 Xcode 中构建项目后,我将资源 The.File 与编译的项目 TheCompiledProject 一起放入了一个临时文件夹。以下是 Makefile 的内容:

UPDATE=bundledExecutable

BIN1=TheCompiledProject
BIN2=The.File

all: $(UPDATE)

$(UPDATE): ./$(BIN1) ./$(BIN2)
    @echo "UP  [ $@ ]"
    echo '#!/bin/bash' > $@
    echo 'FOLDER=`mktemp -d -t upgrade`' >> $@
    echo 'cd $$FOLDER; uudecode -c << '"'EOF' | tar -x" >> $@
    uuencode $(BIN1) $(BIN1) >> $@
    uuencode $(BIN2) $(BIN2) >> $@
    echo 'EOF' >> $@
    echo 'chmod a+x $$FOLDER/$(BIN1)' >> $@
    echo 'chmod a+x $$FOLDER/$(BIN2)' >> $@
    echo '$$FOLDER/$(BIN1)' >> $@
    echo 'rm -rf $$FOLDER' >> $@
    chmod a+x $@

如果您使用pathForResource 方法,在TheCompiledProject 中,The.File 的文件路径将按预期返回。

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"The" ofType:@"File"];

【讨论】:

以上是关于使用命令行工具从 Xcode 复制文件的主要内容,如果未能解决你的问题,请参考以下文章

使用下载的 pkg 文件时,xcode 命令行工具安装在哪里?

Xcode 命令行工具 (XCode 4.6) 从终端运行单元测试

如何从 bash 验证是不是已安装 xcode 命令行工具?

在命令行工具中获取资源路径

如何从 OSX Swift 命令行工具或 shebang 脚本文件显示窗口?

如何安装Xcode命令行工具