3

以前は、ファイルのチェックボックスをオンにしてターゲットに追加すると、それがアプリケーション バンドルに含まれると考えていました。使用しないことに決めたいくつかのオーディオ ファイルがあり、ターゲット メンバーシップからそれらのチェックを外しました。彼らはまた#include#importどこにもいない。製品メニューを使用して Xcode プロジェクトを「クリーン」にし、その派生データも削除しました。テストとして、次のような行は削除しませんでした:

NSURL* file_url = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:fileName ofType:fileSuffix]];
pcmData = MyGetOpenALAudioDataAll((CFURLRef)file_url, &data_size, &al_format, &sample_rate);

ターゲットに含まれなくなったこれらのファイルの場所fileNameと参照先。fileSuffix

ただし、驚くべきことに、これらのファイルは引き続き正常にロードおよび再生されます。

どうやら、ファイルは「ターゲットメンバーシップ」チェックボックス以外の別の方法でアプリケーションバンドルに含まれるようです。これはどのように起こっていますか?

4

2 に答える 2

5

ターゲット メンバーシップは、ファイルが処理されるターゲットを決定します。たとえば、プロジェクトに Mac ターゲットと iOS ターゲットの両方が含まれていて、ソース ファイルが Mac ターゲットにのみ含まれている場合、iOS 用にコンパイルされません。

ファイルは、複数のターゲットのメンバーである場合があります。プロジェクトには複数のターゲットが含まれる場合があり、通常は少なくとも 1 つ含まれます。ターゲットは、他のターゲットを依存関係として確立できます (たとえば、メイン アプリ ターゲットの「リソースのコンパイル」ターゲットと「オープンソース ライブラリのビルド」ターゲットの依存関係を作成できます)。

ファイルは、ターゲット デバイスまたはシミュレーターに既にインストールされているアプリ バンドルにまだ存在しているようです。アプリが更新されても、アプリ バンドル内のファイルは削除されません。それらを削除するには、アプリをアンインストールして再インストールする必要があります (または、電話のワイプやシミュレーターのリセットなど、アプリのデータを削除する別の操作を実行します)。

于 2013-02-16T02:42:01.143 に答える
2

ターゲットからアイテムを削除しても、既存のビルドからは削除されません (いいと思いませんか)。これを解決するには、デバイスまたはシミュレーターからアプリケーションを削除します。ビルドして再度実行すると、ターゲットに追加されたファイルのみがコピーされます。

于 2013-02-16T02:40:51.480 に答える