了解Xcode的Copy Headers阶段

时间:2012-05-14 14:06:18

标签: xcode build header

在Xcode"复制标题"阶段,"项目"下的标题之间有什么区别?部分和"私人"部分?你什么时候想要使用它们?

另外,我可以理解你为什么要复制公共标题(例如对于静态库) - 但为什么要复制私有标题?

编辑:下面的@mipadi解释了公共和私人部分的角色。但是,我仍然忽略了在"项目"中包含标题之间的区别。部分与没有标题在"复制标题"的任何部分。相。

4 个答案:

答案 0 :(得分:15)

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

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

构建框架时,公共头文件将复制到框架的Headers目录中,而私有头文件将复制到PrivateHeaders目录中。

答案 1 :(得分:6)

@Danra,如果您将标题放在“项目”下,那么无论标题的实际位置如何,这些标题都会对您的实施可见。

比方说,你有这样的文件夹结构:     /Sources/libAF/AFSomething.h     /Sources/libAF/AFSomething.m     /Sources/exec/main.m

如果您在“Project”下放置了“AFSomething.h”,则可以在main.m中使用它,如下所示:     #import“AFSomething.h”

在外行人的术语中,虽然您省略了实际路径信息,但Xcode将包含项目标题。

答案 2 :(得分:0)

来自Setting the Visibility of a Header File

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

  • 私有:该界面不适合您的客户或处于开发的早期阶段。产品中包含一个私有标题,但它标记为“私有”。因此,所有客户都可以看到符号,但客户应该明白他们不应该使用它们。

  • 项目:该接口仅供当前项目中的实施文件使用。除目标代码外,目标中不包含项目头。客户完全看不到这些符号,只有你自己。

答案 3 :(得分:0)

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