web-dev-qa-db-ja.com

Xcode:ヘッダーのコピー:パブリックvs.プライベートvs.プロジェクト?

Cocoa Touch Static Libraryを構築しています。ヘッダーファイルをパブリック、プライベート、またはプロジェクトとしてコピーするかどうかをどのように決定すればよいですか?

68
ma11hew28

パブリック:インターフェースは完成しており、製品のクライアントが使用するためのものです。パブリックヘッダーは、制限なしで読み取り可能なソースコードとして製品に含まれています。

プライベート:このインターフェースは、クライアント向けではなく、開発の初期段階にあります。製品にはプライベートヘッダーが含まれていますが、「プライベート」とマークされています。したがって、シンボルはすべてのクライアントに表示されますが、クライアントはそれらを使用することになっていないことを理解する必要があります。

Project:インターフェイスは、現在のプロジェクトの実装ファイルでのみ使用されます。オブジェクトコードを除き、プロジェクトヘッダーはターゲットに含まれません。シンボルはクライアントにはまったく見えず、あなただけに見えます。

ソース: Xcode開発者ライブラリ>ツールと言語> IDE>プロジェクトエディターヘルプ>ヘッダーファイルの可視性の設定

102

ランディの答えは適切であり、関連するすべての背景を提供します。ライブラリの使用方法に基づいて、役立つ情報を追加したかったのです。

PROJECT:プロジェクトを配布しており、ユーザーが自分のプロジェクトをサブプロジェクトとして含めることを期待する場合は、ヘッダーがマークされていることを確認する必要があります「プロジェクト」として。そうしないと、次のような問題が発生します。 Xcode 4 Archive Version Unspecified

これは、サブプロジェクトのサブプロジェクトを含むすべてのサブプロジェクトに再帰的に適用されることに注意してください。

PUBLIC:ライブラリのユーザーがオブジェクトに対してのみリンクすることを期待する場合(元のプロジェクトがない場合)、ヘッダーが ' public '(参照する必要があるヘッダーのみ)。

25
William Power

Public-同じモジュール内のコード、またはコードが宣言されているモジュールをインポートする別のモジュールへのアクセスを許可します。

Internal-同じモジュール内のコードにアクセスできますが、他のモジュールにはアクセスできません。これは、Swiftのデフォルトのアクセスレベルです。

Private-コードが宣言されているソースファイルへのアクセスを制限します。ソースコードファイルで定義されている単一のクラス、構造、列挙などが一般的ですが、ファイルごとに複数宣言できます。

enter image description here

これらのタイトルは少し誤解を招く可能性があります。すべてのヘッダーは実際にはクライアントに表示され、Finderで閲覧できますが、ヘッダーをアンブレラヘッダーにインポートするには明示的にヘッダーを公開する必要があります。 [対象会員について]

ソースは here および here です

0
yoAlex5