如何让复制文件构建阶段遵循 DSTROOT 构建设置?

How can I get a Copy Files Build Phase to follow the DSTROOT build setting?

我有一个构建库的项目。 Xcode 设置 DSTROOT 设置为默认值 /tmp/$(PROJECT_NAME).dst 并且 Xcode 将库放在那里。我有一个复制阶段来添加手册页。它的目标设置为 "Absolute Path",路径设置为 $(DSTROOT)/usr/local/share/man/man3。当我 运行 它时,它会尝试将手册页复制到“/usr/local/share/man/man3”,所以我的权限被拒绝了。换句话说,它就像未设置 DSTROOT 一样。我尝试明确设置 DSTROOT 值而不是使用默认值。一样的。

如何让这个复制文件构建阶段使用 DSTROOT 值?

不要使用绝对路径。一种方法是将 select Wrapper 作为目标并使用“../../usr/local/share/man/man3”作为相对路径。这假定包装器路径是 /Applications/$(PRODUCT_NAME).app,默认值。

另一种方法是根本不使用复制文件构建阶段。使用 运行 脚本构建阶段。将 shell 设置为 /bin/bash 并使用如下脚本:

set -x
mandir="$DSTROOT/usr/local/share/man/man3"
mkdir -p "$mandir"
i=0
while [$i -lt ${SCRIPT_INPUT_FILE_COUNT}] ; do
    name="SCRIPT_INPUT_FILE_$i"
    cp "${!name}" "$mandir/"
    let i=i+1
done

您可能想要 chmod and/or chown 复制文件后。

确保将要复制的文件添加为构建阶段的输入,并将输出路径(可以基于 ${DSTROOT})添加为输出。