web-dev-qa-db-ja.com

FlutterプロジェクトをSDK(iOS動的フレームワーク)としてエクスポートする方法

素晴らしいFlutterプロジェクトを構築しました。これは、exportframeworkとして、ネイティブlibrariesと同様に、 ソースコードは非表示です(動的フレームワークに変換)。

私たちは指示に従いました: https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps

これにより、FlutterEngineを初期化し、FlutterViewControllerを使用して、FlutterプロジェクトをHost iOSアプリに含めることができます。

問題は、動的フレームワークをどのように作成するか、つまりSomeProductSDK.frameworkとしましょう。これにより、SomeProductSDK関連モーダルスクリーン

// In any app
import SomeProductSDK

let controller = TransactionViewController() // SomeProductSDK.framework with partial implementation with flutter
self.present(controller, animated: true)
9
Almas Adilbek

私はあなたが望むものを部分的に達成しました。これらはすべて非常に実験的なものであり、プロダクション対応のSDKには全体的に悪い考えです。しかし...それは可能です。

  1. 通常どおりフラッターアプリを作成し、iOSシミュレーターで1回実行します。
  2. Xcodeワークスペースを開き、新しいフレームワークを追加します。私の目的のために、RunnerLibという名前を付けます。
  3. そのフレームワークのデプロイメントターゲットをRunnerと同じになるように変更します。また、ビットコードを無効にします。
  4. App.frameworkおよびFlutter.frameworkのターゲットメンバーシップをRunnerLibに変更します。
  5. 1つの静的メソッド+ (void)launchFrom:(UIViewController *)parentでLauncherクラスを作成します。これにより、FlutterViewControllerが作成され、表示されます。
  6. ランチャークラスを使用するようにランナーを書き換えます。 FlutterAppDelegateを標準のAppDelegateで置き換え、ViewControllerを作成します。これは標準のネイティブiOSプロジェクトのように見えるはずです。そのため、プロジェクトを作成してAppDelegate、ストーリーボード、ViewControllerにコピーできます。
  7. ビューコントローラー、viewDidAppear、またはボタンのIBActionでlaunchFromメソッドを呼び出します。
  8. ランナーを作成し、フラッター画面が表示されることを確認できます。
  9. これで、Runnerアプリをビルドすると、クレートされたRunner.appを開くことができ、FrameworksディレクトリにApp、Flutter、Runnerの3つのフレームワークが含まれていることがわかります。
  10. フレームワークには2つのセットが必要です。1つはデバッグモードでコンパイルされたシミュレータ用のセット、もう1つはデバイス用にアーカイブされたセットです。デバッグフレームワークの取得は非常に簡単です。Xcodeからコンパイルして製品を検査するだけです。アーカイブされたフレームワークはより難しいので、xcodebuild archive無効な署名付き。
  11. ユーザーは、デバイスに応じて正しいフレームワークを使用するようにプロジェクトを構成する必要があります。おそらく、このステップはCarthageとfatバイナリーによって自動化できますが、よくわかりません。問題はApp.frameworkにあり、デバイスとシミュレーターでは完全に異なって見えます。

ソースコード: https://github.com/szotp/runner_lib

5
szotp

フレームワークのコードは必ずデフォルトでFlutter SDKに依存するため、フレームワークをネイティブライブラリとしてエクスポートするには、フレームワークを使用するユーザー(ユーザー)が自分のコンピューターにFlutter SDKをインストールしていることを確認する必要があります。したがって、あなたがしようとしていることは、pub.devに独自のパッケージを持っていることと同じです。

エクスポートするフレームワークを作成する方法が見つかった場合-Flutterのフレームワークとは関係なく、フレームワークとしてエクスポートするのが理にかなっています。 (それは間違いなく可能ですが、そこにフレームワークを配置するためだけに投入する作業量と時間を確認してください。同じ努力と時間で独自のFlutterフレームワークを構築することもできます)

素晴らしいFlutter Projectをすでに作成しているので、パッケージとして https://pub.dev/ にアップロードすることを検討してくださいあなたが望むなら。

提案:パッケージを試してみたいユーザーにFlutterのインストールを依頼できます。このようにして、あなたの努力は無駄になりません。

結論:あなたがしようとしていることを達成することは実際的に実現可能ではありません。