在 Xcode 的“Copy Headers”阶段,“Project”部分和“Private”部分下的 headers 有什么区别?你想什么时候使用每个?
另外,我可以理解您为什么要复制公共标头(例如对于静态库)-但是为什么要复制私有标头?
编辑: @mipadi 下面解释了公共和私有部分的角色。但是,我仍然缺少在“项目”部分中包含标题与在“复制标题”阶段的任何部分中没有标题之间的区别。
如果公共标头包含私有标头,则必须复制私有标头,但您要确保库或框架的使用者知道这些私有标头不是公共 API 的一部分。
“项目”标头是不包含在公共标头中的私有标头(它们通常是内部实现的一部分,因此仅包含在实现.c
或.m
文件中)。
在构建框架时,公共头文件被复制到Headers
框架的目录中,而私有头文件被复制到PrivateHeaders
目录中。
@Danra,如果您将标题放在“项目”下,则这些标题将对您的实现可见,无论标题的实际位置如何。
假设您的文件夹结构如下: /Sources/libAF/AFSomething.h /Sources/libAF/AFSomething.m /Sources/exec/main.m
如果您将“AFSomething.h”放在“项目”下,则可以在 main.m 中像这样使用它:#import "AFSomething.h"
用外行的话来说,Xcode 将包含项目标头,尽管您省略了实际的路径信息。
公开:界面已完成,旨在供您产品的客户使用。公共标头包含在产品中,作为不受限制的可读源代码。
私有:该界面不适用于您的客户,或者它处于开发的早期阶段。产品中包含一个私有标头,但它被标记为“私有”。因此,这些符号对所有客户都是可见的,但客户应该明白他们不应该使用它们。
项目:该接口仅供当前项目中的实现文件使用。项目标头不包括在目标中,除了在目标代码中。这些符号对客户根本不可见,只有您自己可见。
除此之外,通常人们有一个脚本来“清理”私有标题,这样公众就无法看到这些符号是什么。出于调试/开发目的,保留私有标头,它们在开发和调试阶段派上用场。