3

Xcodeとバンドルリソースのコピーについて質問があります。

私は現在、大規模なアセットライブラリを使用したプロジェクトに取り組んでいます。したがって、クリーンインストールまたはバンドルリソースの変更は、「新しい」バンドルリソースのコピーを保証します。

ただし、私が現在直面している問題は、アプリケーションがビルドされるたびに、Xcodeがアセットライブラリ全体の一部をコピーしていることです。私が取り組んだすべてのプロジェクトで、Xcodeはリソースが変更された場合、クリーンインストールの場合、または以前にコピーされていない新しいものがあった場合にのみリソースをコピーしたため、この動作は非常に奇妙です。

ただし、この場合、クリーンインストールですべてのリソースがコピーされました(予想)。ただし、連続するビルドごとに、ファイルの一部がコピーされます。これは非常に奇妙なことです。どのファイルも変更されておらず、すべてのファイルをコピーしているわけではなく、ごく一部のファイルしかコピーしていないからです。もう1つ、シミュレーターで同じ構成で同じアプリを実行した場合、コピーは発生しません(うめき声の奇妙さ)。

変更できる設定はありますか、またはこれを防ぐ可能性のあるフラグを含めることができますか?

助けてくれてありがとう!

乾杯!

4

2 に答える 2

4

この質問が出されてから 1 か月が経ちましたが、「一種の回避策」の解決策を見つけることができました。

さて、これを受け入れられた回答として入れている理由は、主に、これを書いている時点で他の回答/解決策が投稿されていないためです。より良いものが投稿された場​​合 (または更新がある場合)、より良い回答を承認済みとしてマークします。

いずれにせよ、この「回避策」は、連続したビルドで変更されない非常に大きなアセット セットがある場合に有効です。

私が取り組んでいるプロジェクトには、すでに準備された多くのオーディオ ファイルとビデオ ファイルがあり、変更する予定はありません (時折の再録音またはそれらの線に沿った何かを除いて)。

したがって、私の質問が述べているように、Xcode はリソースのサブセットをコピーしていました。理想的には、リソースがコピーされると (そして変更がない場合)、連続したビルドで再コピーされません (少なくとも再コピーされることは想定されていません)。私の場合、連続して実行するたびにコピーされていたため、合計ビルド時間が約 15 ~ 20 分かかりました。また、ビルド フェーズで「スクリプトの実行」を使用したかどうか、または Xcode プロジェクトでメディアを使用したかどうかに関係なく、同じ問題に直面していたことも指摘したいと思います。

解決策: 私がしたことは、プロジェクトをクリーンアップし、アプリを削除して、新規インストールを行うことでした。したがって、初めて、アプリですべてのファイルをコピーします。また、assets ディレクトリは私の Xcode プロジェクトにはありません。「run-script」フェーズを追加しました。ビルドごとに、 rsyncを実行してメディア フォルダーからアプリにメディアをコピーします。

ここで、アプリが新しいビルドを完了すると、必要なすべてのメディア ファイルがコピーされます。

次に、スクリプトを削除/無効にし、Xcode でクリーンを実行し (コマンド + シフト + K)、プロジェクトを再度実行します。今回はスクリプトが実行されておらず、Xcode がクリーンを実行したため、バイナリを再コンパイルするだけでよいと判断したため、非常に高速にビルドされます。アプリを削除していないので、メディア フォルダーはまだアプリ内にあり、ビルドから開始までの時間は約 30 秒 ~ 1 分です (これにはサンドボックスとコード署名が含まれます)。アプリケーションのコード署名と「サンドボックス化」にはまだ時間がかかりますが、実行するたびに 15 ~ 20 分待たなければならないよりはずっとましです。:)

お役に立てれば!

于 2013-03-06T22:56:16.843 に答える
2

私は非常によく似た状況を持っています。また、アプリには 6000 個のリソースがあり、それらの一部を一覧表示する (コピーしない) のも少し遅かったです。別の回避策を見つけました(あなたのものと非常に似ていますが、実行するのは少し簡単です)。それはあなたの 1 つに触発されたので、どうもありがとうございました!

プロジェクトのターゲットをコピーし、そのバンドル ID を元のものとして設定し (ビルド設定から ${PRODUCT_NAME} で自動的に設定されました)、[バンドル リソースのコピー] セクションからすべてのリソースを削除しました。初めて (デバイス アプリから削除した後)、元のターゲットをそのリソースと共に起動する必要がありますが、リソースがまだデバイス上にある間に、コピーされたターゲットをビルドできます。

いくつかの利点:

  • 両方のターゲットを簡単に切り替えることができます
  • スクリプトを2つ書く必要はありません(それが私があなたのソリューションを使用しなかった目的でした)

数字で楽しむ:

  • 「Cmd+R」からロード画面が表示されバンドルリソースが表示されるまで58秒。
  • 空の「バンドル リソースのコピー」セクションと同じ間隔で 20 秒。あなたの改善ほど良くはありませんが、それでも違いはあります。

これも役立つことを願っています:)

于 2013-09-19T16:43:08.610 に答える