7

ほとんどのプロジェクトに含めたいコードがあります。AFNetworking、CoreData のカテゴリ、単体テストなど。

これらすべてを静的ライブラリに含めて、それを各プロジェクトで使用するのは理にかなっているようです。ただし、すべてのソース ファイルをコピーし、必要なライブラリをプロジェクト ターゲットに手動でリンクすることにより、多くのサードパーティ ライブラリ (AFNetworking やその前身である ASIHTTP など) がプロジェクトに含まれていることに気付きました。

これは私には最も簡単な方法のようです。既存の静的ライブラリをプロジェクトに含める方法を理解するのにかなりの時間がかかりました。方法を知った後でも、新しいプロジェクトごとにそれを行うのは面倒なようです. また、指定するヘッダー検索パスは、静的ライブラリのファイルを含むローカル ディレクトリです。スタティック ライブラリのファイルをプロジェクトにコピーする方が簡単ではないでしょうか。方法はありますか? これは、ほとんどのライブラリが既に行っているように、クラス ファイルを直接インクルードするのと同じ考え方ですが、クラス ファイルをあらゆる場所に配置してそれらすべてをインクルードするのではなく、すべてが 1 つのライブラリ プロジェクトにまとめられるため、より整理されます。

静的ライブラリは、正しい方法であるべきだと感じています。すべてのプロジェクトが必要とするクラスを含む、すべてのプロジェクトで使用できるライブラリを作成します。理にかなっています。「正式な」ライブラリからすべてを除外し、代わりにすべてのクラスファイルをコピーするのが正しい方法のように思われるため、私はただ矛盾しています。

経験豊富な開発者が最良の選択肢であると判断したものを探しているだけだと思います。

4

4 に答える 4

7

私は、Xcode で静的ライブラリを参照するプロセスが完全に直感的ではないことを最初に認めます。ただし、スタティック ライブラリを使用することが最善の選択肢であることは間違いありません。

主な理由は保守性です。ライブラリのソース コードを多くの場所にコピーする場合、ライブラリの次のバージョンにアップグレードするときに、それらすべてを最新のコードに更新することを忘れないでください。これは、特に基盤となるライブラリ ソースが大幅に変更された場合 (たとえば、新しいファイルが追加された、古いファイルの名前が変更されたなど)、かなりエラーが発生しやすいプロセスになる可能性があります。

于 2012-09-07T14:22:58.003 に答える
3

中途半端な解決策があります-ソースから静的ライブラリを構築するXCodeプロジェクトを作成し、それを各プロジェクトのメインリポジトリから含まれる共有リポジトリ(つまり、gitサブモジュールなど)に配置します。

各プロジェクトには、このサブモジュールとプロジェクトが含まれます。その後、サブモジュールをプルするたびに最新のソースコードを取得します。これをビルド依存関係として設定すると、最初にビルドするときに静的ライブラリがビルドされ、その後のビルドごとにXCodeを含めるだけで十分にスマートになるため、ビルド時間が短縮されます。

また、ステップスルー/デバッグ用のソースがすぐそこにあるという利点もあります。

別のXCodeプロジェクトにあり、新しいバージョンのライブラリがソースファイルを追加または削除する場合は、その共有プロジェクトを変更するだけで済みます。個々のプロジェクトはまったく変更されません。

于 2012-09-07T15:06:58.267 に答える
1

CocoaPodsの使用についてはどうですか? このツールは、宣言的な方法で必要なことを正確に実行します。依存関係を宣言するファイル (Podfile) があり、ツールはすべての依存関係をダウンロードし、プロジェクトに追加される静的ライブラリを構築します。

于 2013-01-15T09:49:08.880 に答える
0

静的ライブラリは、いくつかの理由で正しい方法であると思われることに同意しますが、いくつかの問題を引き起こす可能性もあります.

良い点は、ライブラリをプロジェクトに追加する簡単な方法を作成することです。完全に直感的というわけではありませんが、スタティック ライブラリをプロジェクトに追加するのは、数回行った後でかなり簡単です。ファイルを追加し、検索パスを追加して完了です。これは、特定のソース管理状況でも役立ちます。また、ライブラリの更新がより簡単になる場合があります。

ここでの本当の問題は、オープンソース コミュニティにあると思います。たとえば、AFNetworking を静的ライブラリとして含めると、実装ファイルへのすべてのアクセスが失われます。これは、ライブラリではなくソースを含めることの優れた機能です。これにより、コードを適切と思われる方法に変更し、うまくいけば恩返しすることができます。

于 2012-09-07T14:29:30.813 に答える