1. ホーム
  2. アイオス

[解決済み】ライブラリ?静的?ダイナミック?それともフレームワーク?プロジェクトの中に別のプロジェクトがある

2022-05-02 09:20:22

質問

既存のiOSアプリがあるのですが、テストを容易にするために、別のプロジェクトとして開発してきたコードの大きな塊を追加したいと考えています。新しいチャンクは、基本的に画像をさまざまな共有サービスなどに保存することを扱っています。この共有コードは多くのテストと将来のアップデートが必要なため、そのコードチャンクを既存のアプリに組み込む最良の方法は何だろうと考えていました。

スタティック・ライブラリ、ダイナミック・ライブラリ、フレームワークのどれにすべきなのか、正直なところ、何が違うのか、どうすればXcodeにセットアップできるのか、よくわかりません。

私が知っているのは、共有コードのテスト・更新用アプリを別に用意し、メインアプリにそれを使わせる必要がある/させたいということだけです。

どのように解決するのですか?

まず、一般的な定義(iOSに特化したもの)をいくつか紹介します。

静的ライブラリ - コンパイル時にリンクされたコードの単位で、変更されることはありません。

ただし、iOSのスタティック・ライブラリは ではない は、画像やアセットを含むことができません(コードのみ)。この課題を回避するには メディアバンドル とはいえ

より良い、正式な定義は、Wikipediaに記載されています。 こちら .

ダイナミックライブラリ - 実行時にリンクされるコードやアセットの単位で、以下のようなものです。 可能性があります。 を変更します。

しかし、iOS用のダイナミックライブラリを作成できるのはAppleだけです。これを作成するとアプリが拒否されるので、作成することはできません。(参照 これ 他のSOの投稿に確認と理由があります)。

ソフトウェアフレームワーク - タスクを達成するためにコンパイルされたコードのセット...したがって、実際には 静的フレームワーク または ダイナミックフレームワーク これらは通常、上記のコンパイルされたバージョンに過ぎない。

をご覧ください。 ソフトウェアフレームワークに関するWiki をご覧ください。

したがって、iOSでは、基本的に静的ライブラリか静的フレームワークを使うしかありません(主な違いは、静的フレームワークは、コンパイルされた .a 一方、静的ライブラリは単にサブプロジェクトとして含まれることが多く、すべてのコードを見ることができます。 .a ファイルをプロジェクトの依存関係として使用します)。

iOS用の静的ライブラリとメディアバンドルのセットアップはそれほど難しくなく、その方法については多くのチュートリアルがあります。個人的には、このチュートリアルをお勧めします。

https://github.com/jverkoey/iOS-Framework

これは非常にわかりやすいガイドで、偽の静的ライブラリを扱うというデメリットはありません。

静的ライブラリを作成したら、それを サブモジュール を Git に登録して、さまざまなプロジェクトで使えるようにします。

グッドラック

EDIT

について サブプロジェクト 私の知る限り、これを正しく動作/コンパイルさせるには、基本的にサブプロジェクトが最初にコンパイルされるようなコンパイルチェーンを設定する必要があり、これにより静的フレームワークである .a ファイルを作成し、プロジェクトで依存関係として使用します。

このチュートリアルでは、このことについて説明しています。

http://www.cocoanetics.com/2011/12/sub-projects-in-xcode/

EDIT 2

iOS 8から、Appleは開発者がダイナミックフレームワークを作成することを許可するようになりました! (注意:ダイナミックフレームワークを含むには、アプリのターゲットが最低でもiOS 8でなければなりません...バックポーティングは許可されていません)。

これは新しいプロジェクトテンプレートとして追加されました。Xcode 6.1では、次の場所で見つけることができます。

New Project -> iOS -> Framework & Library -> Cocoa Touch Framework