Flutter在iOS中一些点

Posted Xylophone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter在iOS中一些点相关的知识,希望对你有一定的参考价值。

1. ios对Flutter有如下依赖

  • Flutter.framework:     Flutter engine等;
  • APP.framework:业务代码, 由dart代码生成。App.framework也包含了kDartVmSnapshotData,kDartVmSnapshotInstructions,kDartIsolateSnapshotData,kDartIsolateSnapshotInstructions四个部分 ;
  • Flutter Plugin: plugin相关;
  • flutter_assets:  Flutter依赖的静态资源,如字体,图片等。

2.  iOS工程是怎么路由到dart的?

(1)ios初始化flutterVC

FlutterViewController* flutterViewController = [[FlutterViewController alloc] initWithProject:nil nibName:nil bundle:nil];
[flutterViewController setInitialRoute:@"myApp"];

(2)dart项目的main函数启动并由window.defaultRouteName拿到route

void main() {
      runApp(_buildWidget());
}
Widget _buildWidget() {
     String route = window.defaultRouteName;
     ....
     return widget;
}

(3)Flutter.framework渲染页面

 3. kernel_blob.bin文件的作用是什么?为什么模拟器运行需要此文件,真机运行不需要此文件?

  kernel_blob.bin是业务代码的产物 Dart kernel bytecode ,在debug调试的时候,Dart的代码有改动,则 kernel_blob.bin也会有相应的改变。release模式(AOT模式)下,dart编译器会用Dart kernel bytecode编译成二进制的arm集成代码。

   也就是说,模拟器运行是Debug模式(JIT模式),业务代码的来源是需要两个文件,一个是APP.framework里的App二进制代码一个是kernel_blob.bin。而真机运行是release模式(AOT模式),直接可以运行APP.framework里的App二进制代码。所以模拟器需要kernel_blob.bin文件,真机不需要kernel_blob.bin文件。

 4. Flutter项目里构建iOS包的常用命令

  4.1  flutter build

(1)flutter build ios

lipo -info .ios/Flutter/App.framework/APP  查看结果是armv7 arm64

题外话:pod package打包iOS framework命令

pod package hummer_container.podspec.json --spec-sources=‘git@gitlab.alipay-inc.com:ifoundation-ios/Specs.git‘ --no-mangle --force

(2)flutter build ios --debug 

lipo -info .ios/Flutter/engine/Flutter.framework/Flutter  查看结果是x86_64 armv7 arm64 

(3) flutter build ios --simulator   

 lipo -info .ios/Flutter/App.framework/APP  查看结果是 x86_64

  4.2 flutter packages

(1)flutter packages get

当你在添加一个包后首次运行(IntelliJ中的’Packages Get’)flutter packages get,Flutter将找到包的版本保存在pubspec.lock。这确保了如果您或您的团队中的其他开发人员运行flutter packages get后回获取相同版本的包。

(2)flutter packages upgrade

根据pubspec.yaml中指定的版本约束下载所允许的最高可用版本。

以上是关于Flutter在iOS中一些点的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 布局备忘录

IOS开发-OC学习-常用功能代码片段整理

flutter解决 dart:html 只支持 flutter_web 其他平台编译报错 Avoid using web-only libraries outside Flutter web(代码片段

是否有一种方法可以将实时记录的音频片段连续发送到Flutter.io中的后端服务器?

在 webview_flutter 中启用捏合和缩放,在哪里添加代码片段 [this.webView.getSettings().setBuiltInZoomControls(true);]

错误记录Flutter 混合开发获取 BinaryMessenger 报错 ( FlutterActivityAndFragmentDelegate.getFlutterEngine() )(代码片段