8

私の会社の iPhone/iPad 製品は、数世代の iOS と Xcode (現在は 5.1 と 4.3) に移行しており、多くのターゲットがあります。おそらくこれらの要因が原因で、PBXBuildFile セクションの各ソース ファイルに多くの同一の行があります。

14EE4CD315A5E69000DCA763 /* リソース内の movie@2x.png */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* movie@2x.png */; };
14EE4CD415A5E69000DCA763 /* リソース内の movie@2x.png */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* movie@2x.png */; };
14EE4CD515A5E69000DCA763 /* リソース内の movie@2x.png */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* movie@2x.png */; };
14EE4CD615A5E69000DCA763 /* リソース内の movie@2x.png */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* movie@2x.png */; };
14EE4CD715A5E69000DCA763 /* リソース内の movie@2x.png */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* movie@2x.png */; };

特定のソース ファイルの行はすべて完全に同一であり (私が間違っていたので、まったく同じではありません...)、重複する行の数は、0 行から 6 行以上までさまざまです。この重複のため、project.pbxproj の PBXBuildFile セクションは約 5000 行の長さになりますが、実際には約 1200 の一意のファイルしかありません。

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

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

二次的な質問: どうしてこうなったの? 他の誰かがこの種の重複行を見つけましたか?

4

4 に答える 4

7

ご覧のとおり、ファイル ref は重複していますが、各ターゲット内のファイルの id には 14EE4CD* 3 *15A5E69000DCA763 という小さな違いが 1 つあります。8 桁目はかなり異なります。

于 2012-11-16T11:47:02.353 に答える
6

他の人もこれに遭遇した場合に備えて、後世のために投稿します。

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

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

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

于 2016-05-20T22:51:19.463 に答える
1

通常、Xcode は、複数のターゲットで参照されるファイルに対して一意の参照 (ID) を生成します。複数のビルド ターゲットがあり、LoginViewController が両方で参照されているため、最終的に異なる fileRef ID になると思います。見た目は同じですが、無害かもしれないと思って削除すると、クラッシュする可能性があります。

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

于 2016-03-10T06:17:56.420 に答える