IOS 8のリリースでは、iOSの動的および静的フレームワークについて少し混乱していることを認めざるを得ません。
作成したライブラリを配布する方法を探していますが、iOS 7以降をサポートする必要があります。 (注:これは独自のフレームワークになります。ココアポッドは使用できず、ソースも配布できません)。私がすでに知っていることは次のとおりです。
そして、この情報に関する私の質問は次のとおりです。
IOS8より前のXcodeでは、iOS用の静的ライブラリを作成するオプションのみが許可されていました。それに関する一般的な問題は、バイナリとヘッダーを別々に出荷する必要があったことです。
その後、一部の開発者は「静的フレームワーク」を作成するというアイデアを思いつきました。 [.frameworkは、libおよびヘッダーへのシンボリックリンクを持つ単なるフォルダーです]。そのような例の1つは https://github.com/jverkoey/iOS-Framework
このオプションは、iOS 7またはiOS 8以前で機能します。なぜなら、それらはヘッダーファイルをバンドルする便利さを備えた単なる静的ライブラリだからです。
リソースに関する質問については、「。bundle」にバンドルする必要があります。それらを出荷するために、.frameworkフォルダーにそれらを含めることができるかどうかはわかりません。静的フレームワークとバンドル...
ただし、Swiftを使用している場合、上記のオプションは機能しません。 Xcodeは、Swiftコードを含む静的ライブラリの構築をサポートしていません。
Swiftを使用する場合は、ダイナミックフレームワークを使用する必要があります。理論的には、動的フレームワークはiOS7で機能します。しかし、アプリがiOS7を対象としており、動的フレームワークを使用している場合、iTunes Connectは拒否すると思います:-)。
お役に立てれば
Xcode 9以降では、Swiftの静的フレームワークも作成できます。これは、ABIソースの互換性により可能です。フレームワークターゲットのビルド設定でMach-O type
を変更するだけです。この手法は、ハイブリッドフレームワーク(SwiftおよびObjective-Cコードを使用したフレームワーク)にも適用できます。
Swiftは静的ライブラリでは機能しません。ダイナミックフレームワークを使用する必要がある場合は、最小iOSを8.0に設定する必要がありますbecause AppStore reject ios 7 with dynamic framework
フレームワークはstatic
またはdynamic
librariesがいくつかの追加アセット、バージョン管理のためのメタ記述などのバンドルにパックされています。
Framework target -> Build Settings -> Mach-O Type
を変更することにより、Linker
に影響を与えるライブラリの形式を変更できます。[約] to Static Library
またはDynamic Library
。デフォルトでは、XcodeにはDynamic Library
値があります。
この設定に応じて、異なるタイプのバイナリが生成されます [静的または動的を確認]
コンシューマを正常に構成した後 [リンクと埋め込み]
Static Linker: ld
atcompile時は、static library
のすべてのコードを実行可能オブジェクトファイルに含めます。
Dynamic Linker: dyld
は、ロード/実行時に@rpath
を使用して埋め込みフレームワークを見つけようとします[約] とリンク