我以前认为,如果您选中文件的复选框以将其添加到目标,那么它就是如何包含在应用程序包中的。我有一些我决定不使用的音频文件,并且我从目标成员资格中取消选中它们。它们也不是 #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
指的是这些不再包含在目标中的文件。
然而,令人惊讶的是,这些文件仍然可以正常加载和播放。
显然,除了“目标成员资格”复选框之外,文件还以另一种方式包含在应用程序包中。这是怎么回事?
最佳答案
目标成员决定了一个文件是为哪个目标处理的。例如,如果您的项目同时包含 Mac 目标和 iOS 目标,并且源文件仅包含在 Mac 目标中,则不会针对 iOS 进行编译。
一个文件可能是多个目标的成员。一个项目可能包含多个目标,通常至少包含一个目标。一个目标可以将其他目标建立为依赖项(例如,您可以为您的主要应用程序目标创建一个“编译资源”目标和一个“构建开源库”目标依赖项。)
听起来文件仍然存在于目标设备或模拟器上已经安装的应用程序包中。当应用程序更新时,您的应用程序包中的文件不会被删除。要删除它们,您必须卸载并重新安装应用程序(或执行其他删除应用程序数据的操作,例如删除手机或重置模拟器。)
关于ios - Xcode 的 "Target Membership"是否与 Bundle 相关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14906312/