0

一些背景。我有一个 Xcode 项目,目前我有三种构建配置(AdHoc、Debug 和 Release),但很可能会再添加一个。用于项目存档构建的构建配置在方案的存档部分中定义。

我使用 xcodebuild 作为 Jenkins 作业的一部分,并使用 -configuration 选项指定要使用的构建配置。

我发现“clean”命令(xcodebuild clean blah.blah.blah)尊重 -configuration 选项,但 archive 命令不这样做,它将使用方案的 Archive 部分中指定的任何内容。

因此,如果我想将构建从它设置的任何内容更改为,例如从 AdHoc 更改为 Release,我需要修改该方案。

我想出了一个 sed 命令,它将在方案文件中查找并将任何出现的 buildConfiguration = "Adhoc" 替换为 buildConfiguration = "Release",即:

my_build_configuration="Release"
sed -i '' -e 's/buildConfiguration = "[^"]*"/buildConfiguration = "'$my_build_configuration'"/' path/to/file

问题是这不仅适用于 ArchiveAction 项目,而且适用于所有项目(构建、运行、测试等...)如果可能的话,我希望专门针对 Archive 操作,但我不确定该怎么做这使用 sed。

这是我想要搜索的内容:

   <ArchiveAction
  buildConfiguration = "Adhoc"

然后我想只替换双引号中的值,例如;将 AdHoc 更改为 Release,所以它看起来像

   <ArchiveAction
  buildConfiguration = "Release"

我不太确定从哪里开始

4

2 回答 2

0

您应该将一行加载到缓冲区中(假设它始终在 2 行中)

sed "/<ArchiveAction/ {
   N
   s/\(buildConfiguration = \"\)[^\"]*\"/\1${my_build_configuration}\"/
   }
   " path/to/file

如果不是先在同一行尝试,如果失败加载下一个并重试

sed "/<ArchiveAction/ {
   s/\(buildConfiguration = \"\)[^\"]*\"/\1${my_build_configuration}\"/
   t
   N
   s/\(buildConfiguration = \"\)[^\"]*\"/\1${my_build_configuration}\"/
   }
   " path/to/file
于 2013-11-11T07:14:41.363 回答
0

感谢 SeanN,我在 OS X 上有一个可行的解决方案:

`sed -i '' -e '/<ArchiveAction/,/<\/ArchiveAction/ s/buildConfiguration = "[^"]*"/buildConfiguration = "'$my_build_configuration'"/' /Path/To/File`

感谢大家在这方面的帮助,这一切都非常感谢。

于 2013-12-06T16:29:05.817 回答