【问题标题】:Ruby modify project.pbxprojRuby 修改 project.pbxproj
【发布时间】:2012-10-01 19:53:35
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ruby json parsing pbxproj


    【解决方案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 将修改后的文件恢复到其原始格式,但在文件为 XML 格式时调用 xcodebuildxcrun 应该没问题.

    【讨论】:

    • 我还发现plutil-convert-o的顺序很挑剔。如果你把-o放在前面,它会抛出一个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    相关资源
    最近更新 更多