gpt4 book ai didi

xcode - 您如何在 Xcode 10 脚本构建阶段使用文件列表 (.xcfilelist)?

转载 作者:行者123 更新时间:2023-12-03 17:31:13 26 4
gpt4 key购买 nike

从 Xcode 10 开始,构建脚本阶段可以使用文件列表 ( .xcfilelist ) 进行输入和输出,而不是直接指定输入/输出文件。这些文件似乎支持注释(WWDC 示例在顶部显示了命令行注释)、空行(也在示例中),并且希望每行一个文件路径。如果这些文件包含build设置(例如 $(SRCROOT) ),它们会在调用脚本之前被扩展,就像如果文件路径直接作为输入/输出文件被扩展一样。

这听起来是一个很棒的功能,但是您将如何在实际脚本中使用这些文件列表?

直接指定文件时,您有 shell 变量 SCRIPT_INPUT_FILE_COUNTSCRIPT_OUTPUT_FILE_COUNT然后为每个输入/输出文件设置一个变量,命名为 SCRIPT_INPUT_FILE_#SCRIPT_OUTPUT_FILE_#哪里#曾经是一个向上计数的数字。假设您有相同数量的输入/输出文件,此脚本将打印所有文件:

#!/bin/sh
: $((i=0))
while [ $i -lt "$SCRIPT_INPUT_FILE_COUNT" ]
do
eval fileIn="\$SCRIPT_INPUT_FILE_${i}"
eval fileOut="\$SCRIPT_OUTPUT_FILE_${i}"
echo "$fileIn --> $fileOut"
: $((i=i+1))
done

这是一个干净的 POSIX 兼容 shell 脚本,是的,你可以在需要时让它更好 bash但上面的代码应该适用于每个 sh兼容的 shell (它在使用 #!/bin/sh 而不是 #!/bin/bash 时也 promise )。

但是当使用文件列表时, SCRIPT_INPUT_FILE_COUNT是 0。相反,你得到 SCRIPT_INPUT_FILE_LIST_COUNTSCRIPT_OUTPUT_FILE_LIST_COUNT ,以及变量 SCRIPT_INPUT_FILE_LIST_#SCRIPT_OUTPUT_FILE_LIST_# ,包含预处理文件列表的路径,其中所有注释和空行都已被删除,并且所有build设置都已展开。

现在,我将如何在我的脚本中使用这些文件列表?上面的小示例脚本如何使用 Xcode 中的文件列表生成相同的输出?我不是很擅长 shell 脚本,我正在寻找一个干净的解决方案,它不需要任何其他脚本解释器,但 sh .

最佳答案

我不知道有什么方法可以访问 shellscript 中的文件列表本身。但是,文件列表的想法是理想情况下,无论有多少文件,您都可以拥有一个列表。所以,我通常将它硬编码为我给 xcode 的相同值。它有点重复,但不是很多:

set -e
while read file; do
EXPANDED=`eval echo "$file"`
echo "do something with $EXPANDED"
done <"${SRCROOT}/path/to/files.xcfileslist"
作为此 read 的副作用我们去除空白并进行其他一些光处理的设备。如果您特别想知道如何实现这一点,请参阅 this SO answer .
我相信大多数(全部?)build设置都作为环境变量导出到脚本中。因此,通过使用 eval 评估它们在这里,我们扩展它们。
使用 eval开启了恶意文件列表可以执行代码的可能性。然后它可能与您正在执行的构建脚本位于同一位置,所以我不确定这是一个非常实际的问题。其他 shell 有更安全的方法来解决这个问题,但我不知道 Vanilla 的任何方法 sh和默认的 macOS。

关于xcode - 您如何在 Xcode 10 脚本构建阶段使用文件列表 (.xcfilelist)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53771040/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com