Xcode的“目标成员资格”与Bundle有关吗?

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);

fileNamefileSuffix 指的是不再包含在目标中的文件。

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

因此,显然,除了“目标成员资格”复选框之外,还有其他方式将文件包含在应用程序包中。这是怎么发生的?


1
你尝试过彻底删除该应用程序吗? - Mick MacCallum
好的发现。显然它被缓存在设备本身上。把你的评论变成答案,我会接受它。谢谢。 - johnbakers
2个回答

5

目标成员确定文件被处理的目标。例如,如果您的项目包含 Mac 目标和 iOS 目标,并且一个源文件只包括在 Mac 目标中,则不会为 iOS 编译它。

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

这意味着该文件仍然存在于已安装在目标设备或模拟器上的应用程序包中。当应用程序更新时,应用程序包中的文件不会被删除。要删除它们,您必须卸载并重新安装应用程序(或执行另一项删除应用程序数据的操作,例如擦除手机或重置模拟器)。


1
你的回答更好,+1。 - Mick MacCallum
3
请记住,这仅适用于开发版本。当真正的客户更新应用程序时,早期版本中存在但在新版本中不再存在于包中的文件实际上已从用户设备中删除。 - rmaddy

2

从目标中移除项目不会从现有的构建中移除它们(那该多好啊)。为了解决这个问题,你可以从设备或模拟器中删除应用程序,当你再次构建和运行时,只有添加到你的目标中的文件才会被复制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接