理解Xcode';复制头阶段

理解Xcode';复制头阶段,xcode,build,header,Xcode,Build,Header,在Xcode的“复制头”阶段,“项目”部分和“私有”部分下的头有什么区别?您想在什么时候使用每一个 此外,我可以理解为什么要复制公共头(例如,对于静态库),但为什么要复制私有头 编辑:@mipadi下面解释了公共和私有部分的角色。但是,我仍然缺少在“项目”部分包含标题与在“复制标题”阶段的任何部分都不包含标题之间的区别。如果公共标题包含私有标题,则必须复制私有标题,但您希望确保库或框架的使用者知道这些私有头不是公共API的一部分 “项目”头是不包含在公共头中的私有头(它们通常是内部实现的一部分,

在Xcode的“复制头”阶段,“项目”部分和“私有”部分下的头有什么区别?您想在什么时候使用每一个

此外,我可以理解为什么要复制公共头(例如,对于静态库),但为什么要复制私有头


编辑:@mipadi下面解释了公共和私有部分的角色。但是,我仍然缺少在“项目”部分包含标题与在“复制标题”阶段的任何部分都不包含标题之间的区别。

如果公共标题包含私有标题,则必须复制私有标题,但您希望确保库或框架的使用者知道这些私有头不是公共API的一部分

“项目”头是不包含在公共头中的私有头(它们通常是内部实现的一部分,因此只包含在实现--
.c
.m
--文件中)

构建框架时,公共头被复制到框架的
headers
目录中,而私有头被复制到
PrivateHeaders
目录中。

来自:

  • 公共:该界面已最终确定,供您产品的客户使用。公共头作为可读的源代码包含在产品中,没有任何限制

  • 私有:该界面不是为您的客户设计的,或者它处于开发的早期阶段。产品中包含一个私有标题,但它标记为“private”。因此,这些符号对所有客户端都是可见的,但是客户端应该明白,他们不应该使用它们

  • 项目:该接口仅供当前项目中的实现文件使用。目标中不包括项目标题,但目标代码中除外。客户根本看不到这些符号,只有您可以看到


@Danra,如果您将头放在“项目”下,则这些头将对您的实现可见,而不管头的实际位置如何

比方说,您的文件夹结构如下: /Sources/libAF/AFSomething.h /Sources/libAF/AFSomething.m /Sources/exec/main.m

如果您将'AFSomething.h'放在“Project”下,您可以在main.m中使用它,如下所示: #导入“AFSomething.h”


用外行的话说,Xcode将包括项目标题,尽管您忽略了实际的路径信息。

只是为了补充这一点,通常人们有一个脚本来“清理”私有标题,这样公共标准就无法看到符号是什么。出于调试/开发目的,请保留私有标题,它们在开发和调试阶段很有用。

非常感谢!我不明白在“复制标题”阶段的“项目”部分包含标题与在该阶段完全不包含标题的效果是什么。@Danra:当标题可见性设置为“项目”时,它将在编译库或框架时使用,但不作为最终产品的一部分包含在内(即,它仅用于内部实现)。如果它根本不在该阶段,则标题也将可用。导入它仍然有效。据我所知,“复制标题”阶段是一种在链接阶段之后发生的生成后事件。顺便说一句,在向项目添加扩展/协议时,默认情况下,Xcode通常不会向任何目标添加适当的.h文件,并且它不会出现在“复制头”阶段。我仍然缺少在“项目”中包含头的区别在“复制标题”阶段的任何部分中都没有标题。