我在建一个可可触摸静态图书馆。我应该如何决定是否将头文件复制为公共、私有或项目?
Public: 界面已经完成,可供您的产品客户使用。产品中包含一个公共头作为可读的源代码,不受限制。 Private: 这个界面不是为你的客户设计的,或者还处于开发的早期阶段。产品中包含一个私有标头,但它被标记为“私有”。因此,这些符号对于所有客户端都是可见的,但是客户端应该明白他们不应该使用这些符号。 Project: 该接口仅供当前项目中的实现文件使用。除了目标代码之外,目标中不包含项目标头。客户端根本看不到这些符号,只有您可以看到它们。
Public: 界面已经完成,可供您的产品客户使用。产品中包含一个公共头作为可读的源代码,不受限制。
Private: 这个界面不是为你的客户设计的,或者还处于开发的早期阶段。产品中包含一个私有标头,但它被标记为“私有”。因此,这些符号对于所有客户端都是可见的,但是客户端应该明白他们不应该使用这些符号。
Project: 该接口仅供当前项目中的实现文件使用。除了目标代码之外,目标中不包含项目标头。客户端根本看不到这些符号,只有您可以看到它们。
来源: Xcode Developer Library > Tools & Language > IDE > Project Editor Help > 设置头文件的可见性
Randy 的回答很好,给了你所有相关的背景知识。我想添加一些信息,以帮助您基于您期望您的图书馆将如何使用。
PROJECT: 如果您正在分发您的项目,并且期望用户将您的项目作为子项目包含在他们自己的项目中,那么您应该确保您的头部被标记为“ PROJECT”。如果不这样做,就会导致这样的问题: Xcode 4归档版本未指定
请注意,这适用于每个子项目... 包括子项目的子项目,递归。
PUBLIC: 如果你期望你的库的用户只链接到你的对象(并且没有你的原始项目) ,确保你的标题被标记为“ PUBLIC”(只有他们需要引用的标题)。
Objective-C Header: Public,Private,Project
[ Objective-C 静态库手册] [目标会员]
Public -向消费者公开的 API
Private -对消费者公开的 API,但是使用它是有风险的
Project -API 对于使用者是不可见的
文件结构
ClassA.h - public ClassB.h - project ClassC.h - private
Header 文件夹由:
Public Headers Folder Path(PUBLIC_HEADERS_FOLDER_PATH) //default value is $(CONTENTS_FOLDER_PATH)/Headers
PrivateHeader 文件夹的设置方法如下:
Private Headers Folder Path(PRIVATE_HEADERS_FOLDER_PATH) //default value is $(CONTENTS_FOLDER_PATH)/PrivateHeaders
为了向 Objective-C 或 Swift 用户公开 Objective-C 代码,应该使用 .modulemap和 公众人士头文件
.modulemap
//Swift import SomeModule //Objective-C @import SomeModule;
[ . modulemap ] -> 只有公共标题或错误
为 Objective-C 消费者提供具有非模块使用的 Objective-C 代码
//Objective-C //umbrella #import <ObjCFramework/ObjCFramework.h> //specific руфвук #import <ObjCFramework/ClassA.h> //#import <ObjCFramework/ClassB.h> //error #import <ObjCFramework/ClassC.h>
导入项目标头时,将获得
Showing All Messages 'ObjCFramework/ClassB.h' file not found