5

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

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

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

但是在修改了 json 之后,我想恢复过程以将更改保存为 pbxproj 格式。有人知道这样做的方法吗?

4

1 回答 1

1

似乎没有办法直接将 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 将修改后的文件恢复到其原始格式,但调用xcodebuildxcrun当文件为 XML 格式时应该没问题。

于 2014-02-19T20:14:13.463 回答