How to export Flutter project as SDK (iOS dynamic framework)

Alm*_*bek 8 frameworks static-libraries ios flutter dynamic-frameworks

We have built an awesome Flutter project, which has great functionality we want to export as a framework, just like native libraries do, so that the source code is hidden (convert to dynamic framework).

We have followed the instructions: https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps

which allows us to include Flutter project in a Host iOS app, initializing FlutterEngine and use of FlutterViewController.

The question is, how do we create a dynamic framework, let's say SomeProductSDK.framework, which will expose a public methods to create our SomeProductSDK related modal screens?

// In any app
import SomeProductSDK

let controller = TransactionViewController() // SomeProductSDK.framework with partial implementation with flutter
self.present(controller, animated: true)
Run Code Online (Sandbox Code Playgroud)

szo*_*otp 6

我已经部分实现了你想要的。所有这些都是非常实验性的,对于生产就绪的 SDK 来说总体上是个坏主意。但是……有可能。

  1. 像往常一样创建 flutter 应用程序并在 iOS 模拟器上运行一次。
  2. 打开 Xcode 工作区并添加新框架。出于我的目的,我将其命名为 RunnerLib。
  3. 将该框架的部署目标更改为与 Runner 相同。也禁用位码。
  4. 将 App.framework 和 Flutter.framework 的目标成员资格更改为 RunnerLib。
  5. 使用一个静态方法创建 Launcher 类:+ (void)launchFrom:(UIViewController *)parent,这应该创建一个 FlutterViewController 并呈现它。
  6. 重写 Runner 以使用 Launcher 类。用标准的 AppDelegate 替换 FlutterAppDelegate,制作 ViewController 等。它应该看起来像标准的原生 iOS 项目,所以你可以创建一个并复制 AppDelegate、storyboard 和 ViewController。
  7. 在您的视图控制器、viewDidAppear 或按钮上的 IBAction 中调用 launchFrom 方法。
  8. 您应该能够构建 Runner 并看到颤振屏幕出现。
  9. 现在,如果您构建了 Runner 应用程序,您可以打开打包好的 Runner.app,并看到 Frameworks 目录包含 3 个框架:App、Flutter 和 Runner。
  10. 您需要有两组框架:一组用于模拟器,在调试模式下编译,另一组用于设备 - 存档。获取调试框架非常简单,只需从 Xcode 编译并检查产品即可。存档框架更难,我建议xcodebuild archive禁用签名。
  11. 您的用户必须根据设备配置他们的项目以使用正确的框架。可能这一步可以由 Carthage 和 fat 二进制文件自动执行,但我不确定。问题出在 App.framework 上,它在设备上与在模拟器上看起来完全不同。

源代码:https : //github.com/szotp/runner_lib