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 混合开发】添加 Flutter 到 iOS
Flutter 混合开发系列 包含如下: 嵌入原生View-Android 嵌入原生View-iOS 与原生通信-MethodChannel 与原生通信-BasicMessageChannel 与原生 ...
- Flutter和iOS混编详解
前言 下面的内容是最近在使用Flutter和我们自己项目进行混编时候的一些总结以及自己踩的一些坑,处理完了就顺便把整个过程以及一些我们可能需要注意的点全都梳理出来,希望对有需要的小伙伴有点帮助,也方便 ...
- iOS中支付宝集成
iOS中支付宝集成 如今各种的App中都使用了三方支付的功能,现在将我在使用支付宝支付集成过程的心得分享一下,希望对大家都能有所帮助 要集成一个支付宝支付过程的环境,大致需要: 1>公司:先与支 ...
- iOS中数据库应用基础
iOS 数据库入门 一.数据库简介 1.什么是数据库? 数据库(Database) 是按照数据结构来组织,存储和管理数据的仓库 数据库可以分为2大种类 关系型数据库(主流) PC端 Oracle My ...
- 正则表达式在iOS中的运用
1.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...
- iOS 中的 HotFix 方案总结详解
相信HotFix大家应该都很熟悉了,今天主要对于最近调研的一些方案做一些总结.iOS中的HotFix方案大致可以分为四种: WaxPatch(Alibaba) Dynamic Framework(Ap ...
- iOS中使用正则
一.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...
- IOS中div contenteditable=true无法输入
在IOS中<div contenteditable="true"></div>中点击时可以弹出键盘但是无法输入.加一个样式-webkit-user-sele ...
- 谈谈iOS中的屏幕方向
众所周知,iOS中提供了[UIDevice currentDevice].orientation与[UIApplication sharedApplication].statusBarOrientat ...
- iOS中assign、copy 、retain等关键字的含义
iOS中assign.copy .retain等关键字的含义 转自:http://my.oschina.net/majiage/blog/267409 assign: 简单赋值,不更改索引计数cop ...
随机推荐
- 使用 WSDL 指定的标准 SOAP 消息格式
为 XML 文档(定义 Web 服务)定义架构的行业标准 Web 服务描述语言 (WSDL) 提供了两个主要的 SOAP 格式设置选项.这两个选项均在 XML 元素中指定,而不在主 WSDL 命名空间 ...
- AcWing 839. 模拟堆 2022/5/30
关键代码: void head_swap(int a, int b){ swap(ph[hp[a]], ph[hp[b]]); swap(hp[a], hp[b]); swap(h[a], h[b]) ...
- win10 打开剪切板失败 拒绝访问 已解决!!
问题 剪切板使用混乱,导致本地无法复制粘贴 解决办法 terminal运行echo off | clip
- (0319) SV 中的 iff 事件控制
https://blog.csdn.net/yinyeyy/article/details/111086864
- vue2 安装swiper
npm install swiper@5.4.5 -D
- Winfrom ComboBox中的性能探索
在为Control维护元素列表的过程中,会不可避免的造成性能损耗,我们接下来要探究的就是哪种方式才是我们的最优解. 方案比较 以ComboBox为例,常见的方式一共有两种:Add.AddRange. ...
- Scp 免密拷贝
为了图方便 想在更新主机服务的同时把应用同步到备机, 需做一下ssh 的公钥设置 详细见该链接 scp免密传输文件 - lucas-xie - 博客园 (cnblogs.com)
- Django ImageField 内置属性height,width和size
ImageField实例使用height,width和size属性后,若后继操作需重新打开实例,其他模块方法才能调用实例,使用open()方法:>>> from PIL import ...
- QMap 删除指针内容时的一个问题
在测试代码时,发现一个问题: void UserManager::removeUser(const QString &name) { QMap<QString, User*>::I ...
- Ubuntu 18.04 安装基本应用
Ubuntu 谷歌浏览器下载:第一步打开终端,在终端输入下载命令wget https://dl.google.com/linux/direct/google-chrome-stable_current ...