我正在 Xcode 4.6.2 中开发一款 iPhone 应用程序,该应用程序只有一个目标,并且我注意到一些重要文件不是我的目标的成员。我的自定义标头文件都不是目标成员资格的一部分,我的 Info.plist、我的 Prefix 标头或产品“MyApp.app”也不是。
按照我理解目标的方式,这些文件当然需要是目标的成员。
我的问题是:为什么这些文件不是我的目标成员?
在搜索了SO之后,类似的问题已经产生了一些见解,但不是该问题的完整答案。我收集到的见解是:
头文件不是目标的成员,因为它们在“复制头文件”构建阶段被链接。
Info.plist 和 Prefix.pch 不是目标的成员,因为 Info.plist 在“复制捆绑资源”构建阶段进行链接,并且 Info.plist 包含指向前缀标头的键/值条目(前缀.pch)
头文件是其他源文件引用的内容,以便它们知道类的接口是什么。它们不需要作为二进制文件本身的一部分,因此不需要包含在最终产品中。
Info.plist
是一种特殊情况,因为它定义了应用程序包本身,因此需要单独处理。
一般来说,您希望文件在以下情况下成为目标的成员:
.m
) 文件或库),或者如果文件仅用作构建过程的一部分并且在运行时不需要,则不需要它们成为目标的成员。通常这是任何类型的头文件,包括预编译头文件 (
.pch
)。
只有
.m
文件和资源文件是目标的一部分,而不是 .h
。
你是对的:Info.plist 文件和标头都在构建设置中引用(这又是特定于目标的)。
仅需要为框架目标复制标头,并且只是因为它们是框架版本的一部分(它们允许用户知道如何使用框架)。应用程序不需要标头,因为它们是编译的独立实体。标头(和 pch 文件)在编译期间使用,但在运行时不需要。
info.plist 的处理方式不同。它通常不能被复制,因为在项目中它通常不被称为“Info.plist”。该文件也必须存在于应用程序中,因此 Xcode 不会为您提供不包含该文件的选项。
这是我的答案,希望对任何人都有帮助,因为我花了几个小时寻找解决方案。 我正在构建一个基于 SDL2 的游戏,我必须在 SDL2 框架的“构建设置”下设置“跳过安装:是”。