2009-09-21 15 views

答えて

28

Xcodeプロジェクトの表面構文は「旧式のplist」です。あなたは簡単に、これは「本当のXML」が、XML構文で表現のMac OS X用のplist構造ではない

plutil -convert xml1 -o - myproj.xcodeproj/project.pbxproj 

注コマンドを使用してXML plistをに変換することができます。ほとんどすべてがキーと値のペアの辞書と配列で構成されています。 XcodeはXML表現を読み込みますが、プロジェクトを開いたときに「古いスタイルのplist」に変換し直します。

plistの項目の構造と関係は、プロジェクトの構造に従います。 UUIDは、プロジェクトとそのターゲットの間、およびプロジェクトとプロジェクトラッパーのユーザーファイルとの間で項目を相互参照するために使用されます。

'isa'キーは、各種類のオブジェクトを識別します。 PBXProjectにはPBXFileReference、PBXGroup、PBXNativeTarget、およびPBXBuildConfigurationオブジェクトが含まれます。

ターゲットには、ファイル参照への相互参照を含むPBXBuildPhaseオブジェクトがあります。 BuildConfigurationListsは、ターゲットのビルド設定、およびターゲットのタイプや名前などのその他のターゲット設定を格納します。

buildConfigurationListsは、buildSettingsの辞書を含むbuildConfigurationsを相互参照します。

古いスタイルのplistのテキストを最初に見ることをお勧めします。これははるかに読みやすく、実際にインラインでコメントを付けることができます。その後、XMLツールを使用してプロジェクトファイルを編集したり書き込んだりすることができます。

+0

感謝。これは私を始めさせてくれる素晴らしいものです。私はそれがどのようになっているかを伝えるようにします。 –

+2

はこの可逆ですか? xmlをpbxprojに戻しますか? – thndrkiss

+0

@thndrkiss Xcodeは喜んでリスト形式(xml、Jasonなど)のいずれかを読み込み、保存時にネイティブに戻します。 ObjC/Swiftを使用している場合、おそらくXMLに変換する必要はありません。ファイルを直接NSDictionaryに読み込むことができます。 –

21

私は1つを作成することになったが、ここにgithubの上でホストされています:

https://github.com/jasperblues/XcodeEditor

は、ヘッダー、ファイルを一覧表示でき、ソースファイルを追加しますターゲットのメンバーとしてソースファイルを設定する、画像を追加する、グループを作成する、など)。

これはproject.pbxprojファイルの内容を操作することで機能します。で使用されます:

  • 痛みが少ない:モバイルアプリケーションの自動機能テスト。 (編集:Xamarinのツールの一部になりました)。
  • レベルヘルパー:iOSで2Dゲームを開発するRADフレームワーク& Android。 https://github.com/sap-production/XcodeProjectJavaAPI

    それは読んで任意のプロパティリストファイルを書き込むことができますし、Xcodeのプロジェクトファイルを読み込み、操作するためのセマンティックモデルが含まれています:

  • TextMateの
  • Apportable
+0

+1とてもクールです!私はそれをチェックする必要があります! –

3

は、この1つは試してみてください。意味論的モデルは初期段階にあるが、容易に拡張することができる。

これは、今月リリースされるSAPのXcode Mavenプラグインでも頻繁に使用されています。

2

これを行うには素晴らしいPythonパッケージがあります。ドキュメントは素晴らしいわけではありませんが、ソースコードはかなり整理されており、必要なものを見つけることができます。

https://github.com/kronenthaler/mod-pbxproj

3

CocoaPodsは今pbxprojファイルを操作するためのRubyライブラリを持っている:

https://github.com/CocoaPods/Xcodeproj

同様CocoaPodsによって使用されているように、これはfastlanesynxslatherと疑いでも使用されていますもっとたくさん。唯一のPHP(何が必要言語へ簡単に移植)、非常に基本的な書き込みについては

-1

:このレスポンスの

function modifyPlistXCodeProject($file_path,$app_name,$bundle_identifier,$latest_version,$bundle_version) 
{ 
    $data = file_get_contents($file_path); 
    $changes = Array(); 
    $changes['PRODUCT_BUNDLE_IDENTIFIER'] = $bundle_identifier; 
    foreach ($changes as $key => $value){ 
     $data = oldStylePlistReplace($data,$key,$value); 
    } 
    file_put_contents($file_path, $data); 
} 

function oldStylePlistReplace($data,$key,$value){ 
    $e = explode($key,$data); 
    for ($i=1;$i<count($e);$i++){ 
     $row_i = $e[$i]; 
     $nextline_pos = stripos($row_i,"\n"); 
     $text_i = '= '.$value.';'.substr($row_i, $nextline_pos); 
     $e[$i] = $text_i; 
     //var_dump(substr($text_i,0,100));exit(); 
    } 
    return implode($key,$e); 
} 
関連する問題