2012-07-17 2 views
7

私の会社のiPhone/ipad製品は、いくつかの世代のiOSとXcode(現在は5.1と4.3)を移行しており、多くのターゲットを持っています。おそらく、これらの要因のため、PBXBuildFileセクション内の各ソースファイルのための多くの同一のラインは例えば、ある:与えられたソースファイルの行はすべて絶対に(私が間違っていた、彼らは非常にではありませんされていることをXcodeのproject.pbxprojファイル内のファイル参照を重複して削除できますか?

 
14EE4CD315A5E69000DCA763 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* [email protected] */; }; 
14EE4CD415A5E69000DCA763 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* [email protected] */; }; 
14EE4CD515A5E69000DCA763 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* [email protected] */; }; 
14EE4CD615A5E69000DCA763 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* [email protected] */; }; 
14EE4CD715A5E69000DCA763 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* [email protected] */; }; 

注意...)と同じであり、重複する行の数は0から半ダース以上に変わります。この重複のため、project.pbxprojのPBXBuildFileセクションは約5000行ですが、実際には約1200個のユニークファイルしかありません。

これらの重複した行をすべて削除して、すべてのビルドとターゲットで完全回帰テストを行う前に、私はXcodeにこれらの重複した行が何らかの理由で必要ないことを確認したいと思います。

これは、フルバージョンのバージョン管理によって引き起こされたものではないことはかなり確信しています。重複する行はPBXBuildFileセクションにのみ表示され、私はP4を気にしませんが、project.pbxprojファイルの変更をマージするのにはほとんど問題はありませんが、ほぼ20,000行では扱いにくいです。私はXcodeのいくつかのリリースはおそらく新しいターゲットを追加しながら、これを行ったと思うが、私は問題について不平を言う他の誰かを見つけていない。

予備の質問: これはどうでしたか?他の誰かがこのような重複した行を見つけましたか?

答えて

2

後世のために投稿します。

これは、開発者が別々のブランチで作業しているすべての時間に発生します。別の開発者が別のブランチなどに変更を加えた別のグループと同じサブフォルダに新しいグループを追加してから、プロジェクトの変更を共通のベースブランチにマージする必要があります。 Xcodeプロジェクトファイルをマージすることは、それ自身の特別な地獄であり、これらの参照のうちどれを保存したいのかを判断する良い方法はありません。 @Maistor Kokirが指摘しているように、IDは各参照で一意になります。グループはIDでファイルを参照するため、正しいものを選択することが重要です。さらに重要なことは、ビルドのルールとターゲットもIDを参照します。

これを確実に修正するための唯一の方法は、問題のファイルへの参照をすべて削除することです(ビルドターゲットの「ビルドフェーズ」|「コンパイルソース」で)。

そして、ソースで真に修正するには、開発者が共通ブランチ(たとえばgitの "master"ブランチ)での変更をに変更し、その変更を開発ブランチにマージすることをお勧めします。プロジェクト追加は通常、同じ処理を必要としません。ファイルを別のグループに移動すること、または同じグループ内の別の場所に移動すること、グループの名前を変更すること、または削除すること、サブモジュールの参照を削除すること、または変更すること(「」に限定されます)経験はあなたの真のガイドになります。

5

ファイルrefが重複していますが、各ターゲット内のファイルのIDには少し違いがあります。14EE4CD * * 15A5E69000DCA763、8桁は多少異なります。

+0

ラット、私はほぼ同じIDの海でそれを逃したとは思えません。私は今までこれを解消することをあきらめていました。私は戻ってIDがどのようにプロジェクトのバリアントにマップされているかを見なければなりません。 – Taryn

+1

はい、複数のビルドターゲットがある場合、このセクションは一度ターゲットごとに一意に参照されます。一種の意味があります。 –

0

私は最終的に多くの重複ファイル参照を取り除いてスクリプトを作成して実行しました。そうすることは全く無害なようでした。私の地元のビルドはすべて正しく機能し続けました。 私は雇用者を変更して以来、これらの修正をチェックインしたことはありません。退室する直前に数十チームのビルドを破る可能性のある爆弾を投げるのは大変なことでした。

0

通常、Xcodeは複数のターゲットで参照されるファイルに対して一意の参照(ID)を生成します。私は、複数のビルドターゲットとLoginViewControllerを両方とも参照していて、それぞれが異なるfileRef IDで終わっているとします。同じように見えますが、無害であると仮定してそれらを取り除いても、クラッシュする可能性があります。

http://www.monobjc.net/xcode-project-file-format.htmlからpbxprojファイルの詳細を読むことができます。

関連する問題