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

如何在Xcode 10脚本构建阶段使用文件列表(.xcfilelist)?,xcode,shell,sh,xcode10,Xcode,Shell,Sh,Xcode10,从Xcode 10开始,构建脚本阶段可以使用文件列表(.xcfilelist)进行输入和输出,而不是直接指定输入/输出文件。这些文件似乎支持注释(WWDC示例在顶部显示了命令行注释)、空行(也在示例中),或者希望每行有一个文件路径。如果这些文件包含生成设置(例如,$(SRCROOT)),则会在调用脚本之前展开这些设置,就像直接将文件路径指定为输入/输出文件一样 这听起来是一个很好的特性,但是在实际脚本中如何使用这些文件列表呢 直接指定文件时,您有shell变量SCRIPT\u INPUT\u F

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

这听起来是一个很好的特性,但是在实际脚本中如何使用这些文件列表呢

直接指定文件时,您有shell变量
SCRIPT\u INPUT\u FILE\u COUNT
SCRIPT\u OUTPUT\u FILE\u COUNT
,然后每个输入/输出文件有一个变量,名为
SCRIPT\u INPUT\u FILE\u
SCRIPT\u OUTPUT\u FILE\u\u
,其中
\35;
过去是一个递增计数。假设您有相同数量的输入/输出文件,此脚本将打印所有文件:

#/垃圾箱/垃圾箱
:$((i=0))
而[$i-lt“$SCRIPT\u INPUT\u FILE\u COUNT”]
做
eval fileIn=“\$SCRIPT\u INPUT\u FILE\${i}”
eval fileOut=“\$SCRIPT\u OUTPUT\u FILE\${i}”
回显“$fileIn-->$fileOut”
:$((i=i+1))
完成
这是一个干净的与POSIX兼容的shell脚本,是的,当需要
bash
时,您可以使它变得更好,但是上面的代码应该可以与每个
sh
兼容的shell一起使用(在使用
!/bin/sh
时,它也承诺使用
!/bin/bash

但是当使用文件列表时,
SCRIPT\u INPUT\u file\u COUNT
为0。取而代之的是
SCRIPT\u-INPUT\u-FILE\u-LIST\u-COUNT
SCRIPT\u-OUTPUT\u-FILE\u-LIST\u-COUNT
,以及变量
SCRIPT\u-INPUT\u-FILE\u-LIST\u-code>和
SCRIPT\u-OUTPUT\u-FILE\u-LIST\u-code>,其中包含预处理文件列表的路径,所有注释和空行都已删除,所有生成设置都已展开


现在,如何在脚本中使用这些文件列表?上面的小示例脚本如何使用Xcode中的文件列表生成相同的输出?我不太擅长shell脚本,我正在寻找一种干净的解决方案,它不需要任何其他脚本解释器,但我不知道如何访问shell脚本中的文件列表本身。然而,文件列表的概念是,无论有多少文件,理想情况下都有一个文件列表。所以,我通常将它硬编码为我给xcode的相同值。它有点重复,但不是很多:

set-e
读取文件时;做
EXPANDED=`eval echo“$file”`
echo“使用$EXPANDED做点什么”
完成