我正在构建一个Cocoa Touch静态库。我该如何决定是否将头文件复制为公共,私有或项目?
答案 0 :(得分:100)
公开:界面已定稿,供您的产品客户使用。公共标题作为可读源代码包含在产品中,没有任何限制。
私有:该界面不适合您的客户或处于开发的早期阶段。产品中包含一个私有标题,但它标记为“私有”。因此,符号对所有客户端都是可见的,但客户应该明白他们不应该使用它们。
项目:该界面仅供当前项目中的实施文件使用。除目标代码外,目标中不包含项目头。客户完全看不到符号,只有你自己。
来源: Xcode开发者库>工具&语言> IDE>项目编辑器帮助>设置头文件的可见性
答案 1 :(得分:24)
兰迪的答案很好,并为您提供了所有相关背景。我想根据您对库的使用方式添加一些信息来帮助您。
PROJECT:如果您要分发项目,并希望用户将项目作为子项目包含在自己的项目中,则应确保标题标记为“项目”。不这样做会导致这样的问题: Xcode 4 Archive Version Unspecified
请注意,这适用于每个子项目......包括子项目的子项目,递归。
PUBLIC:如果您希望图书馆的用户只能链接您的对象(而不是您的原始项目),请确保您的标题标记为“公开”(仅适用于标题)我需要参考)。
答案 2 :(得分:0)
Public
-允许访问相同或另一个模块中的代码。
Project
或Internal
-允许访问相同模块中的代码。
Private
-允许访问相同文件中的代码。
创建伞形文件时,导入的头文件必须是公开的[About Target Membership]
答案 3 :(得分:0)
Objective-C 标头:公共、私有、项目
[Objective-C static library manual]
[Target Membership]
public - 面向消费者公开的 API
私有 - 面向消费者公开的 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