Xcode: 复制头: 公开 VS 私有 VS 项目?

我在建一个可可触摸静态图书馆。我应该如何决定是否将头文件复制为公共、私有或项目?

27076 次浏览

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公众人士头文件

//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