1. ホーム
  2. ios

[解決済み] iOSのStaticとDynamicのフレームワークの違いについて

2022-09-24 09:03:10

質問

iOS 8 のリリースに伴い、iOS の動的および静的フレームワークについて少し混乱していることを認めざるを得ません。

私は自分が作成したライブラリを配布する方法を探しており、iOS 7 以上をサポートする必要があります。(注: これは独自のフレームワークになります。私は cocoa pods を使用することができず、また、ソースを配布することもできません)。以下は、私がすでに知っていることです。

  • iOS 8 では iOS 用の "埋め込みフレームワーク" を導入しましたが、私の理解では、それらは iOS 7 では動作せず、iOS 8 以降でのみ動作します。
  • 私のライブラリを静的ライブラリ (.a ファイル) として配布し、ヘッダーも配布するオプションがあります。これが状況に対処する一般的な方法であることは知っていますが、私はそれよりも単純なものを見つけたいと思います (そして、可能であれば、いくつかのリソースを一緒にバンドルすることも)。
  • また、iOS 7 はダイナミック リンクをサポートしていないため、ダイナミック .framework ライブラリをサポートしていない (スタティックのみ) ことがわかりました。しかし、iOS 8 では、静的リンクと同様にサポートされています。

そして以下は、この情報についての私の質問です。

  • 私は、Mach-O 型を "static library に変更することで、.framework ターゲットを作成し、それを静的にすることができると見ました。これは、問題なく iOS 7 をサポートし、また、私のライブラリを .framework バンドルとして配布するために十分なことでしょうか? もしそうなら、インターネット上の多くのリソースが示唆しているように、なぜiOS 8の"埋め込みフレームワーク"がそれほど大きな問題なのでしょうか?私は何かを見逃しているのでしょうか?
  • 私が作る他のアプリケーションと同様に、.framework をコード化する必要があるのでしょうか?
  • 他のリソース (コア データや画像など) を .framework ファイルに含める必要がある場合はどうすればよいですか? そのために別の .bundle ファイルを作成する必要があるのでしょうか。

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

iOS8 以前では、Xcode では iOS 用の静的ライブラリを作成するオプションしかありませんでした。 その際の共通の問題は、バイナリとヘッダーを別々に出荷しなければならないことでした。

その後、一部の開発者は「静的フレームワーク」を作成するというアイデアを思いつきました。[.framework は lib とヘッダーへのシンボリック リンクを持つフォルダーに過ぎません]。そのような例の 1 つが https://github.com/jverkoey/iOS-Framework

このオプションは、iOS 7または8またはそれ以前で動作します。なぜなら、これらは単なる静的ライブラリで、ヘッダーファイルも一緒にバンドルされているという利便性があるからです。

リソースについての質問ですが、私たちはそれらを '.bundle' でバンドルする必要があります。リソースを出荷するために、それらを .framework フォルダで囲むことができるかどうかはわかりません...。過去には、私は自分のライブラリを静的なフレームワークとバンドルとして出荷していました...

しかし、Swiftを使用している場合、上記のオプションはうまくいきません。Xcode は、Swift コードを含む静的ライブラリの構築をサポートしていません。

Swiftを使用する場合は、動的フレームワークを使用する必要があります。理論的には、Dynamic frameworksはiOS7で動作します。しかし、iTunes Connect は、アプリが iOS7 をターゲットにしていて、Dynamic frameworks を使用している場合、拒否すると思います :-).

お役に立てれば幸いです。