Ruby修改project.pbxproj

时间:2012-10-11 07:48:56

标签: ruby json parsing pbxproj

我正在制作一个用ruby自动修改iOS项​​目的脚本。 添加一些文件后,我需要修改project.pbxproj文件以保存项目中的更改。

我找到了一个将pbxproj文件解析为json的方法:

json = JSON.parse(`plutil -convert json -o - "#{filename}"`)

但是在修改json之后,我想恢复进程以保存pbxproj格式的更改。 有人知道某种方法吗?

1 个答案:

答案 0 :(得分:1)

似乎没有办法直接将JSON转换回pbxproj文件格式,但Xcode会将xml1格式化的数据作为有效的项目文件读取。

受到Library to read/write pbxproj/xcodeproj files?的接受答案的启发,我决定尝试使用项目转换后的JSON运行Xcode。 Xcode给了我一个错误,说项目无效。当我使用plutil将JSON转换为XML时,Xcode就可以正常读取它。当我观察文件内容时,我看到它在Xcode加载时保留在XML中,但是当我在Xcode中更改任何值时,它使用pbxproj格式重写了该文件。它似乎重新排列了框架和库的顺序,但这可能是因为我处理的原始pbxproj是由Unity3D生成的。

以下是如何自动转换,操作和随后使用pbxproj文件的粗略配方:

#!/bin/sh
plutil -convert json -r -o project.json -- project.pbxproj
ruby my_script.rb < project.json > project-modified.json
plutil -convert xml1 -o project-modified.xml -- project-modified.json
cp project-modified.xml project.pbxproj

我不知道是否有一种易于自动化的方式让Xcode将修改后的文件恢复为原始格式,但在文件中调用xcodebuildxcrun应该没问题是XML格式。