我正在制作一个用ruby自动修改iOS项目的脚本。 添加一些文件后,我需要修改project.pbxproj文件以保存项目中的更改。
我找到了一个将pbxproj文件解析为json的方法:
json = JSON.parse(`plutil -convert json -o - "#{filename}"`)
但是在修改json之后,我想恢复进程以保存pbxproj格式的更改。 有人知道某种方法吗?
答案 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将修改后的文件恢复为原始格式,但在文件中调用xcodebuild
或xcrun
应该没问题是XML格式。