从Xcode方案文件中搜索并替换构建配置的特定行

时间:2013-11-08 15:05:27

标签: ios regex xcode sed

一些背景知识。 我有一个Xcode项目,目前我有三个构建配置(AdHoc,Debug和Release),但可能还会添加一个。用于项目归档构建的构建配置在方案的“归档”部分中定义。

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

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

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

我已经提出了一个sed命令,它将查看scheme文件并用buildConfiguration =“Release”替换所有出现的buildConfiguration =“Adhoc”,即:

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

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

以下是我要搜索的内容:

   <ArchiveAction
  buildConfiguration = "Adhoc"

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

   <ArchiveAction
  buildConfiguration = "Release"

我不太清楚从哪里开始

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

感谢大家对此的帮助,非常感谢。