Как экспортировать проект Flutter как SDK (статическая структура iOS)

Мы создали потрясающий проект Flutter, который обладает отличной функциональностью, которую мы хотим экспортировать в качестве фреймворка, как это делают нативные библиотеки, поэтому исходный код скрыт (преобразован в динамический фреймворк).

Мы следовали инструкциям: https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps

что позволяет нам включить проект Flutter в приложение Host iOS, инициализируя FlutterEngine и использование FlutterViewController,

Вопрос в том, как создать динамический фреймворк, скажем, SomeProductSDK.framework, который предоставит открытые методы для создания модальных экранов, связанных с SomeProductSDK?

// In any app
import SomeProductSDK

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

0 ответов

Я частично добился того, чего вы хотите. Все это очень экспериментально и в целом плохая идея для готового к производству 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. Замените FlutterAppDelegate на стандартный AppDelegate, создайте ViewController и т. Д. Он должен выглядеть как стандартный собственный проект iOS, поэтому вы можете создать его и скопировать поверх AppDelegate, раскадровки и ViewController.
  7. Вызовите метод launchFrom в контроллере представления, в viewDidAppear или как IBAction для кнопки.
  8. Вы должны быть в состоянии собрать Runner и увидеть, что появляется экран с дрожанием.
  9. Теперь, если вы создадите приложение Runner, вы можете открыть упакованный Runner.app и увидеть, что каталог Frameworks содержит 3 фреймворка: App, Flutter и Runner.
  10. Вам потребуется два набора фреймворков: один набор для симулятора, скомпилированный в режиме отладки, а другой набор для устройств - заархивированный. Получить фреймворки отладки довольно просто, просто скомпилируйте из Xcode и проверьте продукт. Архивированные фреймворки сложнее, рекомендую сделатьxcodebuild archive с отключенной подписью.
  11. Ваши пользователи должны будут настроить свой проект для использования правильных фреймворков в зависимости от устройства. Возможно, этот шаг можно автоматизировать с помощью Carthage и толстых двоичных файлов, но я не уверен. Проблема заключается в App.framework, который на устройстве выглядит совершенно иначе, чем в симуляторе.

Исходный код: https://github.com/szotp/runner_lib

Чтобы экспортировать фреймворк как собственную библиотеку, вам необходимо убедиться, что у человека, который будет использовать вашу фреймворк (пользователя), установлен Flutter SDK на свой компьютер, поскольку код вашего фреймворка по умолчанию наверняка будет зависеть от Flutter SDK. Итак, то, что вы пытаетесь сделать, эквивалентно созданию собственного пакета на pub.dev.

Если вы найдете какой-то способ сделать фреймворк, который хотите экспортировать, независимым от фреймворка Flutter, только тогда экспорт его как фреймворка будет иметь смысл. (Это должно быть возможно, вне всяких сомнений, но посмотрите, сколько работы и времени вы потратите, чтобы получить там свой фреймворк. За те же усилия и время вы могли бы создать свой собственный фреймворк Flutter)

Поскольку вы уже создали этот замечательный проект Flutter, подумайте о том, чтобы загрузить его как пакет на https://pub.dev/, если хотите.

Предложение: вы можете попросить пользователей, которые хотят попробовать ваш пакет, установить Flutter. Так ваш труд не пропадет даром.

Вывод: практически невозможно добиться того, что вы пытаетесь сделать.

Другие вопросы по тегам