哪些工具支持编辑project.pbxproj文件?

时间:2015-08-21 06:16:53

标签: ios xcode plist xcode-project

我想使用命令行(对于CI服务器脚本)直接编辑project.pbxproj

哪些工具可以让我这样做?

我曾使用PlistBuddy编辑输出Info.plist;但是,我真正想做的是编辑这个用户定义的字段,该字段在多个地方使用,我真的不想在每个plist位置捕获它

3 个答案:

答案 0 :(得分:4)

我知道这已经回答了一段时间,但由于最初的问题是关于支持操作.pbxproj文件的工具,而且许多其他人可能正在寻找相同的信息,这里有怎样的我做到了我花了很长时间来弄明白这一点,因为当我开始尝试这个时,我对Xcode非常不熟悉,所以我希望这可以为其他人节省我必须投入的悲伤时间。

您可以使用plutil命令将.pbxproj文件从旧版.plist格式转换为XML或JSON格式,以便您更轻松地操作。我正在使用JSON。为此,请运行:

plutil -convert json project.pbxproj

这将转换project.pbxproj的格式,但要注意 - 与常识相反 - 输出不会是具有JSON扩展的另一个文件,例如project.json。会发生什么是project.pbxproj将转换为JSON格式,但保留其隐藏的.pbxproj扩展名。因此,即使文件的格式已经更改,Xcode仍然会将其拾取并以新的JSON格式使用它。

然后,您可以使用您选择的任何JSON操作工具轻松更改project.pbxproj。我在Groovy脚本中使用了Groovy的JsonSlurper类。

注意我还研究了XML选项,但我发现XML格式的project.pbxproj文件很难解析。元素未正确嵌套以允许轻松遍历树。它受到以下困扰:

<key>someKey</key>
<dict>
    <!--More elements which provide configuration for the key above-->
</dict>

所以它的位置性质。您必须查找与您要操作的设置相对应的key元素,然后跳转到它之后的dict元素。这意味着您必须将每个XML元素的子元素挂载到一个数组中,以便为它们编制索引。

答案 1 :(得分:1)

project.pbxproj也是old-style ASCII property list文件。因此,您可以使用/usr/libexec/PlistBuddy对其进行编辑。

像这样打印一些用户定义键的值,

# Get the key A83311AA20DA4A80004B8C0E in your project.pbxproj
# LZD_NOTIFICATION_SERVICE_BUNDLE_ID is defined by me,
# Replace key paths with your own.
/usr/libexec/PlistBuddy -c 'print :objects:A83311AA20DA4A80004B8C0E:buildSettings:LZD_NOTIFICATION_SERVICE_BUNDLE_ID' LAAppAdapter.xcodeproj/project.pbxproj

像这样设置其值

/usr/libexec/PlistBuddy -c 'set :objects:A83311AA20DA4A80004B8C0E:buildSettings:LZD_NOTIFICATION_SERVICE_BUNDLE_ID com.dawnsong.notification-service' LAAppAdapter.xcodeproj/project.pbxproj

答案 2 :(得分:1)

以下是3种实现.pbxproj文件编辑的开源工具: