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 ...
随机推荐
- Markdowm的下载方法
1打开百度搜索,输入TYPORA打开下载页面,根据自己的系统(我的是WINDOWS64位)点"DOWN"进行下载安装. 2安装好后回到桌面新建一个文件夹(Markdown学习),然 ...
- Amd,Cmd, Commonjs, ES6 import/export的异同点
Amd,Cmd, Commonjs, ES6 import/export等均是模块化方案 1.Commonjs使用在Nodejs上,加载模块是同步的. 2.Amd是requirejs在推广过程中对模块 ...
- argocd
argocd Argo CD - Declarative GitOps CD for Kubernetes (argo-cd.readthedocs.io) What Is Argo CD Argo ...
- ES6-Promise下
六.实例的finally方法: promise状态发生变化指的是由初始态变成成功或者失败态 处理错误指的是没有调用catch(失败态实例调用可以执行其回调的then) finally里面的回调函数只要 ...
- shell - scriptreplay timing.log output.session
script -t 2> timing.log -a output.session cmd cmd cmd exit scriptreplay timing.log output.session ...
- uniapp获取位置
uni.getLocation({ type: 'gcj02', geocode: true, success: (res) => { uni.showModal({ title:JSON.st ...
- twenty-three
Vue(用于构建用户界面的前端框架) Vue框架的特性,主要有 ① 数据驱动试图 ②双向数据绑定 js数据的变化,会被自动渲染到页面上 页面上表单采集的数据发生变化的时候,会被vue自动获取到,并更新 ...
- python 金融大数据风控建模实战--基于机器学习
王青天 孔越编著, 2020年6月第一版 第一章介绍,介绍金融科技fintech是指使用技术提供财务解决方案.人工智能和机器学习技术可以帮助包括欺诈预防.风险管理.客户服务和营销等多个环节的智能化.个 ...
- 使用@RequestBody注解接收的实体类中的某些参数为null
原因 postman调试接口 为null的参数命名不符合"驼峰法",类似实体类A的属性 cEnterpriseId ,这种命名是不规范的 和lombook的@Data注解有关 用p ...
- Flutter statecontroller.update(MaterialState.disabled,false)无效
因为中间会调用 void initStatesController() { if (widget.statesController == null) { internalStatesControlle ...