Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby modify project.pbxproj_Ruby_Json_Parsing_Pbxproj - Fatal编程技术网

Ruby modify project.pbxproj

Ruby modify project.pbxproj,ruby,json,parsing,pbxproj,Ruby,Json,Parsing,Pbxproj,我正在制作一个脚本,用ruby自动修改iOS项目。 添加一些文件后,我需要修改project.pbxproj文件以保存项目中的更改 我找到了一种将pbxproj文件解析为json的方法: json = JSON.parse(`plutil -convert json -o - "#{filename}"`) 但是在修改json之后,我想恢复这个过程,以pbxproj格式保存更改。 有人知道这样做的方法吗?似乎没有办法直接将JSON转换回pbxproj文件格式,但Xcode会将xml1格式的数据

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

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

json = JSON.parse(`plutil -convert json -o - "#{filename}"`)
但是在修改json之后,我想恢复这个过程,以pbxproj格式保存更改。
有人知道这样做的方法吗?

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

受公认答案的启发,我决定尝试使用项目转换后的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
#/垃圾箱/垃圾箱
plutil-convert json-r-o project.json--project.pbxproj
ruby my_script.rbproject-modified.json
plutil-convert xml1-o project-modified.xml--project-modified.json
cp project-modified.xml project.pbxproj

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

我还发现
plutil
-convert
-o
的顺序很挑剔。如果您将
-o
放在第一位,它将抛出一个错误。