Ruby修改project.pbxproj

use*_*607 5 ruby parsing json pbxproj

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

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

json = JSON.parse(`plutil -convert json -o - "#{filename}"`)
Run Code Online (Sandbox Code Playgroud)

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

ama*_*eod 1

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

受到 Library to read/write pbxproj/xcodeproj files 的公认答案的启发吗,我决定尝试使用项目转换后的 JSON 来运行 Xcode。Xcode 给我一个错误,说该项目无效。当我使用 将 JSON 转换为 XML 时plutil,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
Run Code Online (Sandbox Code Playgroud)

我不知道是否有一种简单的自动化方法可以让 Xcode 将修改后的文件恢复为原始格式,但在文件为 XML 格式时调用xcodebuildor应该没问题。xcrun