2012-10-11 3 views
5

私はRubyを使ってiOSプロジェクトを自動的に変更するスクリプトを作っています。 いくつかのファイルを追加した後、project.pbxprojファイルを変更してプロジェクトの変更を保存する必要があります。ruby​​ modify project.pbxproj

私はJSONにpbxprojファイルを解析する方法を見つけました:

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

しかし、JSONを修正した後、私は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によって生成されたためです。 Xcodeのが修正を持っていて簡単に-automatibleな方法があるかどうか私にはわからない

#!/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 

:ここ

はどのように自動的に操作し、変換するためのラフなレシピですし、続いてpbxprojファイルを使用しますファイルを元の形式に戻すことができますが、ファイルがXML形式である間にxcodebuildまたはxcrunを呼び出すと問題はありません。

+0

私はまた、 'plutil'は' -convert'と '-o'の順番を嫌うことも発見しました。 '-o'を最初に置くとエラーになります。 – amacleod

関連する問題