我正在制作一个使用 ruby 自动修改 iOS 项目的脚本。添加一些文件后,我需要修改 project.pbxproj 文件以保存项目中的更改。
我找到了一种将 pbxproj 文件解析为 json 的方法:
json = JSON.parse(`plutil -convert json -o - "#{filename}"`)
但是在修改了 json 之后,我想恢复过程以将更改保存为 pbxproj 格式。有人知道这样做的方法吗?
似乎没有办法直接将 JSON 转换回 pbxproj 文件格式,但 Xcode 会将xml1
格式化数据读取为有效的项目文件。
受到图书馆接受的答案的启发,以读取/写入 pbxproj/xcodeproj 文件?,我决定尝试使用项目转换后的 JSON 运行 Xcode。Xcode 给了我一个错误,说该项目无效。当我使用 将 JSON 转换为 XMLplutil
时,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 格式时应该没问题。