Xcode:复制标题:公共与私有与项目?

时间:2011-09-16 01:18:40

标签: xcode header static-libraries

我正在构建一个Cocoa Touch静态库。我该如何决定是否将头文件复制为公共,私有或项目?

4 个答案:

答案 0 :(得分:100)

  

公开:界面已定稿,供您的产品客户使用。公共标题作为可读源代码包含在产品中,没有任何限制。

     

私有:该界面不适合您的客户或处于开发的早期阶段。产品中包含一个私有标题,但它标记为“私有”。因此,符号对所有客户端都是可见的,但客户应该明白他们不应该使用它们。

     

项目:该界面仅供当前项目中的实施文件使用。除目标代码外,目标中不包含项目头。客户完全看不到符号,只有你自己。

来源: Xcode开发者库>工具&语言> IDE>项目编辑器帮助>设置头文件的可见性

答案 1 :(得分:24)

兰迪的答案很好,并为您提供了所有相关背景。我想根据您对库的使用方式添加一些信息来帮助您。

PROJECT:如果您要分发项目,并希望用户将项目作为子项目包含在自己的项目中,则应确保标题标记为“项目”。不这样做会导致这样的问题: Xcode 4 Archive Version Unspecified

请注意,这适用于每个子项目......包括子项目的子项目,递归。

PUBLIC:如果您希望图书馆的用户只能链接您的对象(而不是您的原始项目),请确保您的标题标记为“公开”(仅适用于标题)我需要参考)。

答案 2 :(得分:0)

enter image description here

Public-允许访问相同或另一个模块中的代码。

ProjectInternal-允许访问相同模块中的代码。

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 代码,您应该使用 .modulemappublic 标头

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