【发布时间】:2011-09-16 01:18:39
【问题描述】:
我正在构建一个 Cocoa Touch 静态库。我应该如何决定是将头文件复制为公共、私有还是项目?
【问题讨论】:
标签: xcode header static-libraries
我正在构建一个 Cocoa Touch 静态库。我应该如何决定是将头文件复制为公共、私有还是项目?
【问题讨论】:
标签: xcode header static-libraries
Public:界面已完成,旨在供您产品的客户使用。产品中包含一个公共标头作为可读源代码,没有任何限制。
私有:该界面不适合您的客户,或者处于开发的早期阶段。产品中包含一个私有标头,但它被标记为“私有”。因此,这些符号对所有客户端都是可见的,但客户端应该明白他们不应该使用它们。
项目:该接口仅供当前项目中的实现文件使用。项目标头不包括在目标中,除了在目标代码中。客户根本看不到这些符号,只有您才能看到。
来源: Xcode Developer Library > Tools & Languages > IDEs > Project Editor Help > Setting the Visibility of a Header File
【讨论】:
Randy 的回答很好,并为您提供了所有相关背景。我想添加一些信息来帮助您根据您对图书馆的使用方式的期望。
项目:如果您正在分发您的项目,并希望用户将您的项目作为子项目包含在他们自己的项目中,您应该确保将您的标头标记为“项目”。不这样做会导致这样的问题: Xcode 4 Archive Version Unspecified
请注意,这适用于每个子项目...包括子项目的子项目,递归。
PUBLIC:如果您希望您的库的用户仅链接到您的对象(而不是您的原始项目),请确保您的标题被标记为“公共”(仅适用于他们的标题)需要参考)。
【讨论】:
Objective-C 标头:公共、私有、项目
[Objective-C static library manual]
[Target Membership]
public - 向消费者公开的 API
private - 向消费者公开但使用它有风险的 API
project - API 对消费者不可见。一种模块级别的封装
文件结构
ClassA.h - public
ClassB.h - project
ClassC.h - private
Headers 文件夹设置者:
Public Headers Folder Path(PUBLIC_HEADERS_FOLDER_PATH)
//default value is
$(CONTENTS_FOLDER_PATH)/Headers
PrivateHeaders 文件夹设置者:
Private Headers Folder Path(PRIVATE_HEADERS_FOLDER_PATH)
//default value is
$(CONTENTS_FOLDER_PATH)/PrivateHeaders
1.要为 Objective-C 或 Swift 消费者公开 Objective-C 代码,您应该使用 .modulemap 和 public 标头
//Swift
import SomeModule
//Objective-C
@import SomeModule;
[.modulemap] -> 仅公共标头或错误
2.为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
【讨论】: