3

我以前曾想过,如果您选中一个文件的复选框以将其添加到目标,那么这就是它被包含在应用程序包中的方式。我有一些我决定不使用的音频文件,我从 Target Membership 中取消选中它们。他们也不是#include#import任何地方。我使用 Product 菜单“清理”了 Xcode 项目,还删除了它的派生数据。作为测试,我没有删除这样的行:

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

在哪里fileNamefileSuffix引用这些不再包含在目标中的文件。

然而,令人惊讶的是,这些文件仍然可以正常加载和播放。

显然,除了“目标成员资格”复选框之外,文件还以另一种方式包含在应用程序包中。这是怎么回事?

4

2 回答 2

5

目标成员资格确定为哪个目标处理文件。例如,如果您的项目同时包含 Mac 目标和 iOS 目标,并且源文件仅包含在 Mac 目标中,则不会为 iOS 编译它。

一个文件可能是多个目标的成员。一个项目可能包含多个目标,通常至少包含一个。一个目标可以建立其他目标作为依赖项(例如,您可以创建主应用程序目标的“编译资源”目标和“构建开源库”目标依赖项。)

听起来该文件仍然存在于安装在目标设备或模拟器上的应用程序包中。更新应用程序时不会删除应用程序包中的文件。要删除它们,您必须卸载并重新安装应用程序(或执行其他删除应用程序数据的操作,例如擦除手机或重置模拟器。)

于 2013-02-16T02:42:01.143 回答
2

从目标中移除项目不会将它们从现有构建中移除(那不是很好)。要解决此问题,您可以从设备或模拟器中删除应用程序,当您再次构建和运行时,只会复制添加到目标的文件。

于 2013-02-16T02:40:51.480 回答