Objective-Cの静的ライブラリを構築して、単一のバイナリファイルおよびヘッダファイルとして配布する方法を教えてください。

Objective-CでiOS用の静的ライブラリMyLibraryを作成しています。このライブラリには、それぞれ独自の.hファイルを含む便利なクラスが1つにまとめられています。 MyLibraryを単一のコンパイル済みバイナリlibMyLibrary.aと単一の.hヘッダーファイルMyLibraryAPI.hとして配布したいです。 MyLibraryAPI.hには、MyLibraryの1ダースのパブリッククラスごとに1つの#importステートメントが1ダースあります。自分のホストプロジェクトにMyLibraryを含めたい開発者は、libMyLibrary.aバイナリとMyLibraryAPI.hヘッダだけを含める必要があります。これが目標です。

そのため、MyLibrary Xcodeプロジェクトの各パブリッククラスの役割をPublicに設定し、Xcodeコマンドラインbuild utilsとlipoを使用してlibMyLibrary.aを正常に構築しました。その後、私は手動でホストプロジェクトにlibMyLibrary.aと一緒に12ダースのMyLibraryヘッダーファイルをすべて含め、そしてホストプロジェクトは問題なくパブリックMyLibraryクラスを使用することができます。驚くばかり!

問題は、これらのダースのヘッダーファイルを削除し、代わりにMyLibraryAPI.hを使用した場合(私の目的のとおり)、ホストプロジェクトのクラスがMyLibraryAPI.hで参照されているMyLibraryヘッダーファイルを見つけられなくなったことです。代わりに、コンパイル時に次のようなエラーが表示されます。MyAwesomeThingDelegate.h:MyLibraryAPI.hで#importしようとしているMyLibraryクラスごとに、そのようなファイルやディレクトリはありません。ホストプロジェクトのルートディレクトリにlibというフォルダーがあり、ホストプロジェクトのビルド設定で再帰ヘッダーの検索パスがlib / **に設定され、ライブラリ検索パスで再帰パスがlib / **に設定されています。

MyLibraryクラスを使用するにはlibMyLibrary.aとMyLibraryAPI.hを含めるだけでよいように、ホストプロジェクトの検索パスを正しく設定する方法に関するコミュニティからの提案を聞きたいです。あるいは、私が何か悪いことをしているのなら、私は単一のバイナリと単一のAPIヘッダファイルを配布するという私の目標を達成するための別の提案を聞きたいです。

ベストアンサー
私は同じ挑戦をしました、そして、私は以下の解決策を思いつきました:

まず、できるだけ多くの実装の詳細を隠そうとしました。そのため、私は通常クラスのペアを構築しました。1つのクラスはパブリックインターフェイスで、もう1つはプライベート実装です。パブリッククラスにはメンバインスタンスが1つだけあります。それは実装へのポインタです。プライベートクラスは前方宣言のみを持ちます。

@class MyViewImpl;

@interface MyView : UIView
{
    @private
    MyViewImpl* _internal;
}

@property (nonatomic, assign) CGRect highlightArea;
- (void) startAnimation;

@end

次に、すべてのパブリック宣言を単一のヘッダーファイルにまとめました。別のヘッダファイルと同じように作業するのは快適ですが、うまくいきます。残っている唯一のインポートは、以下のようなiOSのもののインポートです。

#import <UIKit/UIKit.h>

転載記事の出典を記入してください: Objective-Cの静的ライブラリを構築して、単一のバイナリファイルおよびヘッダファイルとして配布する方法を教えてください。 - コードログ