web-dev-qa-db-ja.com

Objective-C静的ライブラリを構築する方法?

私はいくつかのObjective-Cクラスを持っています。これらは現在Cocoaアプリケーション(Mac OS X)とCocoa-Touchアプリケーション(iOS)の両方で使用しています。現在、これらのクラスを更新するとき、更新された.hおよび.mファイルを両方のプロジェクトにコピーする必要があります。それほど大したことではありませんが、もっと多くのプロジェクトでそれらを使用するつもりです。

したがって、これらのクラスをObjective-C静的ライブラリに構築したいと思います。そして、他のすべてのプロジェクトでそのライブラリに対してリンクします。

CocoaとCocoa-touchアプリケーションの両方で動作するように静的ライブラリを構築する方法はありますか?

私はこれらのクラスでCocoa静的ライブラリを構築しようとしましたが、Cocoaアプリケーションでそのライブラリにリンクしようとするとさまざまなエラーが発生し、それらは私が実行していないという事実に起因していると確信しています正しい。

では、Objective-C静的ライブラリをrightで構築するにはどうすればよいですか? Cocoa-TouchとCocoa静的ライブラリの両方をビルドする必要がありますか?または、私はそれを行うことができますか?これはどのように行われますか?

このテーマについてよく行われたチュートリアルはありますか?

私はウェブを検索しましたが、このテーマに関する包括的なチュートリアルを見つけることができないようです。そこで、すばらしい回答が投稿され、この質問が私や将来の質問者のためのリソースとして役立つことを期待して、ここに質問をしました。

42
Alex

XCode 5の場合。これらの回答は少し古くなっているようです。ここで主な手順を確認できます http://www.raywenderlich.com/41377/creating-a-status-library-in-ios-tutorial 。しかし、Xcode 5の方がはるかに多くの作業を行い、今ではほぼ思い通りに機能します。

1. Xcodeで新しい静的ライブラリアプリを作成する New Static Library in Xcode

2.作成したファイルを削除して、独自のファイルを追加できます。メソッドなどを追加します Code Code Code

3.スタティックライブラリの小さな問題は、デバイス用にビルドするか、シミュレータで実行することしかできないことです。したがって、ARMおよびi386アーキテクチャをサポートするライブラリを作成する必要があります。これを行うには、ユニバーサルバイナリを作成する必要があります(シミュレータとデバイスビルドをサポートするため)。

新しいターゲットを作成します([ファイル]> [新規]> [ターゲット])。 New Target

4. [新しいターゲット]を選択し、新しいビルドフェーズを追加します([エディター]> [ビルドフェーズの追加]> [実行スクリプトビルドフェーズの追加]) New Build Phase

5.ビルドフェーズを選択し、このリンクからスクリプトを実行スクリプトウィンドウに入力します。 https://Gist.github.com/sponno/7228256

Run Script Code

6.各アーキテクチャー(シミュレーターとiOSデバイス)をビルドする必要があります

6.2。ライブラリを選択してからiOSデバイスを選択し、ビルドまたは実行をクリックします(コマンド+ B)

6.3。次に、シミュレータ(Xcodeの左上にあるライブラリアイコンを選択してから、iOSシミュレータを選択します) enter image description here

7.BullsEyeアイコン> iOSデバイスを作成します。これが集約ターゲットとなり、2つのライブラリーを結合して新しいユニバーサルファイルになります。

8.これがすべて機能するかどうかを確認します。左側のツリーで「製品」フォルダーを展開し、「。a」および「Finderに表示」で終わるファイルを右クリックします。

9.これがすべて機能する場合、Finderに次のファイルが表示されます。あなたが表示されます Library .a file and include files

10.最後のステップは簡単です。「library.aファイルとインクルードフォルダーを新しいXcodeプロジェクトにドラッグするだけです。 enter image description here

enter image description here

新しいプロジェクトでは、使用するヘッダーファイルをインポートする以外に何もする必要はありませんが、リンクフラグやヘッダー検索パスを変更する必要はありません。うまくいきます。

(フィードバックを歓迎します)または、わかりやすくするために投稿を編集してください。

**ボーナスポイント*** VVDocumenter https://github.com/onevcat/VVDocumenter-Xcode をインストールし、これを使用して、ライブラリと共有するheader.hファイルを文書化します。

これで、ライブラリを使用しているすべてのユーザーがopt +クリックして、クラスのコンテキストアウェアヘルプを表示できます。

Context Aware Help based on header file

25
John Ballinger

私は結局 このチュートリアル を見つけました、そしてそれは実際に本当にうまくいきました。誰かがまだ支援を提供したい場合は、実行してください。私はそれを賛成し、承認された回答としてマークします。

12
Alex

(チュートリアルを出発点として使用)

ここで、他のOSのライブラリxcodeprojに2番目のターゲットを作成します。

xcconfigファイル(OSごとに1つ)を使用して、各ターゲットのSDK設定を構成します。これらのxcconfigファイルを他のライブラリで再利用します。これにより、ビルド設定を簡単にグローバルに制御することもできます。

通常どおりターゲット(アプリ)でリンクと依存関係の参照を構成しますが、正しいターゲットライブラリを選択します。

単純なメタコンパイル/簡単なメンテナンスのために、ライブラリプロジェクトに集約ターゲットを追加します。

-または-

スクリプトレイヤーを導入するか、カスタムビルドツールを作成して、すべてを実行します。

11
justin

私はこれも見つけました "Jenkinsを使用した静的ライブラリの構築" 本当に良いです。静的libを適切にセットアップする方法、Jenkinsで自動的にビルドしてから、結果の.aおよび.hファイルを取得できる場所に配置する方法について説明します。

それを CocoaPods またはMaven(私はまだこれを行っていません)と組み合わせると、かなりいいエコシステムを作成できます。

2
wildcat12