95

iOS 8のリリースでは、iOSの動的および静的フレームワークについて少し混乱していることを認めなければなりません。iOS静的vs動的フレームワーク解説

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

  • iOS 8はiOS向けに「組み込みフレームワーク」を導入しましたが、わかりましたが、iOS 7では動作しません。iOS 8以降でのみ動作します。
  • 私はライブラリをスタティックライブラリ(.aファイル)として配布し、ヘッダーを配布することもできます。私はこれが状況を扱う一般的な方法であることを知っていますが、私はそれより簡単なものを見つけたいと思います。
  • iOS 7は動的リンクをサポートしていないため、ダイナミック.frameworkライブラリ(スタティックのみ)をサポートしていません。しかし、静的リンクと同様、iOS 8もそうです。

そして、ここでは、この情報に関して、私の質問は次のとおりです。私は.frameworkターゲットを作成し、「静的ライブラリにマッハOタイプを変更することで、それは静的作ることができることを見た

  • だろうそれは問題なくiOS 7をサポートするのに十分で、ライブラリを.frameworkバンドルとして配布することもできますか?そうであれば、iOS 8の「組み込みフレームワーク」はなぜインターネット上の多くのリソースが私は何かを逃していますか?
  • 私が作った他のアプリケーションと同じように、.frameworkをコード化する必要がありますか?
  • .frameworkファイルに他のリソース(コアデータやイメージなど)を含める必要がある場合はどうすればよいですか?そのために別の.bundleファイルを作成する必要がありますか?
+1

"iOS 7はダイナミックリンクをサポートしていないため、.frameworkライブラリをサポートしていません"このステートメントは正しくありません。 –

+1

私は参照してください。あなたは正しい文を教えてくれますか? iOS 7がダイナミックリンクをサポートしているか、iOS 7が.frameworkライブラリをサポートしているため、falseですか?または両方? – csotiriou

+1

Remeber AVFoundationとCoreGraphicsはすべて.frameworkです。おそらくこれはすべての質問の答えを見つけるのに役立ちます:http://www.raywenderlich.com/65964/create-a-framework-for-ios –

答えて

59

iOS8以前では、XcodeはiOS用のスタティックライブラリを作成するオプションしか許可していませんでした。その共通の問題はバイナリとヘッダを別々に出荷しなければならないことでした。

後で、いくつかの開発者が「静的フレームワーク」を作成するというアイデアを持って来ました。 [.frameworkは、libとヘッダへのシンボリックリンクを持つフォルダです。そのような例の1つはhttps://github.com/jverkoey/iOS-Framework

です。このオプションは、iOS 7または8以前で動作します。それらは単に静的ライブラリであり、ヘッダーファイルをバンドルする際に便利です。

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

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

すばやく使用する場合は、動的フレームワークを使用する必要があります。理論的には、動的フレームワークはiOS7で動作します。ただし、iOS7をターゲットとし、動的フレームワークを使用している場合、iTunes Connectは拒否します:-)

希望します。

4

私はすべての答えを持っていませんが、私はあなたの質問のいくつかをここで解決しようとします。

  • これらのフレームワークをiOS 7で使用すると警告が表示されますが、これはすべて警告です。こちらを参照してくださいanswer

  • CoreDataのような他のリソースを含めることはできますが、コードで手動で作成する必要があります。コアデータモデルの作成方法を示すtutorialがあります。

  • iOS用のコードダイナミックライブラリを作成する必要があります。

  • 配布する予定がある場合、フレームワークがシミュレータとデバイスの両方のアーキテクチャをサポートしていることを確認する必要があります。

6

スウィフトは静的ライブラリでは機能しません。あなたが動的なフレームワークを使用している場合は、8.0 に分のiOSを設定する必要がのAppStoreは、以降のXcode 9でダイナミックなフレームワークとIOS 7

+0

静的ライブラリを迅速なプロジェクトにインポートすることができます – c0d3Junk13

5

を拒否するので、あなたにもスウィフトのための静的なフレームワークを作成することができます。これは、ABIソースの互換性のために可能です。あなたがする必要があるのは、フレームワークターゲットのビルド設定でMach-O typeを変更するだけです。 このテクニックは、ハイブリッドフレームワーク(SwiftとObjective-Cコードを持つフレームワーク)にも適用できます。

+0

大きなヒント。なぜこの答えが得られたのか分かりませんでした。 \ Target'Build Settings \ Mach-O-Typeを選択し、静的フレームワークを選択します。 – rustyMagnet

関連する問題