欢迎重视微信大众号:FSA全栈举动
一、概述
等了这么久,就在 4月9号
这一天,Shorebird
的 1.0
正式版总算来了!本次最关怀的还是对 iOS
的热更新支持得如何了,因为在之前的版别中,iOS
的性能表现几乎差到无法运用~
先给个定论:iOS
端总算能用了!经过测验,iOS
端打完补丁后的性能表现已达上线水平
需求留意的是:
iOS
热更新安稳版别需求运用最新版别的Shorebird CLI (1.0.0)
和最新安稳版别的Flutter (3.19.5)
。
可是
对,可是,先不要着急用!
二、踩坑
我在发布的当天就升级到 1.0
来尝尝鲜,成果在打完补丁后,有几个页面灰屏了!!!
其时脑袋嗡嗡的,我就只改了文本的色彩,不至于吧~
依据控制台的报错的内容定位到了项目里以下两处代码(已简化)
bool _isExist(SomeType type) {
try {
final model = state.models.firstWhere(
(element) => element.type == type,
);
return true;
} catch (e) {
return false;
}
}
String value = '';
...
try {
return json.decode(value);
} catch (e) {
return null;
}
推测 tryCatch
失效了,然后我建了一个最小的 Demo
做测验,竟然全部正常。。。
然后开始忙需求去了,直到 4月15号
小伙伴说官方有提到相关阐明,如下图所示
还真是 tryCatch
导致的,现在咱们能做的便是静静的等待下个版别了。
三、脚本适配(混编)
关于根本运用,这里就不再赘述,有需求的小伙伴可以看我之前的两篇文章
咱们接下来讲一讲升级到正式版后的一些调整
以下是
Shorebird
的1.0
与0.22.1
版别之间的指令改动
ios-framework-alpha
改名为 ios-framework
- shorebird release ios-framework-alpha --release-version 7.0.0+1
+ shorebird release ios-framework --release-version 7.0.0+1
flutter versions use
抛弃
现在你再按如下指令履行,会提示你找不到 use
shorebird flutter versions use 3.19.3
Could not find a subcommand named "use" for "shorebird flutter versions".
Usage: shorebird flutter versions <subcommand> [arguments]
-h, --help Print this usage information.
Available subcommands:
list List available Flutter versions.
Run "shorebird help" to see global options.
假如你需求指定 Flutter
版别,就得在 release
指令中运用 --flutter-version
# 安卓
shorebird release aar --release-version=7.0.0+1 --flutter-version=3.19.5
# iOS
shorebird release ios-framework --release-version=7.0.0+1 --flutter-version=3.19.5
release
的 --force
抛弃
The --force flag has been deprecated
If you believe you have a valid reason to use the --force flag, please reach out to the Shorebird team by filing an issue at https://github.com/shorebirdtech/shorebird/issues/new
- shorebird release aar -f --release-version 7.0.0+1
+ shorebird release aar --release-version 7.0.0+1
Flutter 3.19
补丁
在【Flutter – 升级3.19之后页面多次rebuild?】一文中有讲到补丁需求去到 Flutter
源码目录下履行。咱们知道,Shorebird
的热更新是魔改 Flutter
完成的,所以咱们就需求去找到用来打包时的魔改版 Flutter
的目录位置。
下载的 Flutter
源码一致存放在如下目录
~/.shorebird/bin/cache/flutter
.
├── 5b9d29d67adb059103beefb65710ee3dabae2f85
├── 771d07b2cf97cf107bae6eeedcf41bdc9db772fa
├── a3d5f7c614aa1cc4d6cb1506e74fd1c81678e68e
├── a6d1747d7f573b2ba2e2b96db1b76ed2f3f024da
└── b9b23902966504a9778f4c07e3a3487fa84dcb2a
可是目录中都是以 hash
码命名的目录,要找到对应版别的目录,可以检查如下文件里的值
~/.shorebird/bin/internal/flutter.version
# a6d1747d7f573b2ba2e2b96db1b76ed2f3f024da
假如原先的 flutter versions use
还能用的话,全部就很简单了,先切到对应的 Flutter
版别,然后 cat
一下该文件,拿到 hash
码就可以进入到对应版别的 Flutter
目录,可是它已经被抛弃了,所以得换另一个思路。
咱们仍旧可以经过 flutter.version
拿到 hash
码,可是它是当前最新受支持的 Flutter
版别的,不过不慌,拿到后进入到该 Flutter
目录,因为它是以 git
的方法拉取下来的,所以有分支记录。
咱们可以经过 git rev-parse
指令拿到指定版别的 hash
。
git rev-parse --verify refs/remotes/origin/flutter_release/3.19.3
# 得到如下输出
# 0addba5b750987523c04ebe69e9755509369615a
四、脚本运用(混编)
专门服务于混编项目的 Python
脚本,用于切换原生端集成 Flutter
的方法(源码 或 二进制),以及封装 Shorebird
指令的运用。
咱们日常研发仍旧运用的是源码依靠的方法,只会在打最终测验包时才需求经过脚本切到二进制依靠,并结合
Jenkins
来辅助完成这种万年不变的无聊过程~
Github
:github.com/LinXunFeng/…
switch_flutter_integrate.py
切换
Flutter
项目的集成方法
参数 | 描述 |
---|---|
-p |
原生工程途径 |
-f |
渠道(ios / android ) |
# 二进制依靠
python switch_flutter_integrate.py -p '原生工程途径' -m 'binary' -f 'ios'
# 源码依靠
python switch_flutter_integrate.py -p '原生工程途径' -m 'source' -f 'ios'
shorebird.py
主动获取版别号,并履行
Shorebird
相关指令
参数 | 描述 |
---|---|
-p |
原生工程途径 |
-s |
Flutter 工程途径 |
-m |
形式 (release / patch ) |
-f |
渠道(ios / android ) |
--flutter_version |
Flutter 版别号,如:3.19.3
|
--patch_fix |
是否打 3.19 补丁,如需求请传 1
|
# release
python shorebird.py -p '原生工程途径' -s 'Flutter工程途径' -m release -f ios
# 指定 Flutter 版别,以及打 3.19 的补丁
python shorebird.py -p '原生工程途径' -s 'Flutter工程途径' -m release -f ios --flutter_version=3.19.3 --patch_fix=1
# patch
python shorebird.py -p '原生工程途径' -s 'Flutter工程途径' -m patch -f ios
假如文章对您有所帮助, 请不惜点击重视一下我的微信大众号:FSA全栈举动, 这将是对我最大的鼓励. 大众号不只有
iOS
技术,还有Android
,Flutter
,Python
等文章, 可能有你想要了解的技术知识点哦~