flutter 打开后闪退_Flutter 低版本在iOS14上遇到的问题与解决方案

原文路径https://blog.csdn.net/weixin_27437725/article/details/112273583

一、概述

近期将测试机升级至 iOS14 ,测试使用 Flutter混合开发 的线上 APP,没发现什么问题,但是使用 Xcode 安装APP的场景下,断开 Xcode 后再运行却闪退了。

公司的 APP 测试结果如下:

APP来源 是否闪退 模式

线上 否 release

蒲公英 是 debug

Xcode 是(断开 Xcode 后再打开 APP ) debug

问题原因

闪退的原因是因为 Flutter SDK, Flutter 官方的更新速度也是快,对 iOS14 进行了说明:Flutter官网说明链接

大致意思就是说,如果我们在 iOS14 的真机上安装了 debug模式 编译出来的 flutter 应用,那么在断开编译安装连接后,将无法从桌面上打开该应用程序。

解决方案

再次是使用 Xcode 或 flutter run 来运行。

设置 Flutter 模块的编译模式为 profile 或 release

补充说明

该闪退的情况只发生在真机,并且在模拟器运行的时候, Flutter 模块的编译模式需要为 debug, 如果设置了 release,编译将会报错。

官方指出如果是 纯Flutter项目 可以直接使用 master channel 的 Flutter版本 秒杀这个问题,但对混合开发并没有该说明,加上我们是使用闲鱼的 flutter_boost 实现的混合开发,限制了 Flutter 的版本,所以我也就没有去实践该方案对我们是否可行

二、尝试解决

根据自己的实际情况,我选择了上述的第二个解决方案。

配置

用 Xcode 打开工程项目,在 Build Settings 的最下方找到 User-Defined,点击 + 按钮,添加一个键为 FLUTTER_BUILD_MODE ,值为 release 的配置。

运行

再次运行到真机上,断开 Xcode 运行也不会崩溃了

问题

真机的问题看似是解决了,但是会有问题

问题一:release 或 profile 模式下,Flutter 使用的是 AOT,一些功能不能使用,如:代码断点调试,热重载

问题二:上面也提到了,模拟器只能运行在 debug 模式下,而我们无法避免会在真机和模拟器之间反复切换运行,每次切换就需要手动调整 FLUTTER_BUILD_MODE 的值,十分麻烦

那有什么好的办法解决上面遇到的问题呢?

三、优化方案

其实,真机上的 APP 在断开 Xcode 后无法运行,这个对我们开发者来说不是什么问题,问题是给到测试人员就必须要可以打开才行,包括蒲公英上的包,所以为了节省这些不必要的时间,我们需要自己动手撸一个帮助我们切换 Flutter编译模式 的脚本。

在修改 FLUTTER_BUILD_MODE 的值时,我从 git 中发现,实际上是修改了 项目.xcodeproj,那目前有什么工具可以帮助我们修改 xcodeproj 文件呢?

这里我找到了mod-pbxproj,安装和使用在该库的 wiki 上写的很清楚,这里就不再赘述了,直接上代码

Python

1234567891011121314151617181920212223242526272829303132333435363738

import getoptimport sysfrom pbxproj import XcodeProjectif __name__ == "__main__": argv = sys.argv[1:] # 处理flutter_build_mode flutter_build_mode = (False, "release") # target名称 target_name = None try: opts, args = getopt.getopt(argv, "p:m:t:", ["path=, mode=, target="]) except getopt.GetoptError: print('switch_flutter_build_mode.py -p "plist文件路径" -m "模式(release|debug)" -t "target名称"') sys.exit(1) for opt, arg in opts: if opt in ["-p", "--path"]: project_path = arg if len(project_path) == 0: print('请输入项目的地址') sys.exit(2) if opt in ["-m", "--mode"]: flutter_build_mode = (True, arg if len(arg) > 0 else "release") if opt in ["-t", "--target"]: target_name = arg # 处理flutter if flutter_build_mode[0]: fileName = project_path.split("/")[-1] if not fileName.endswith("xcodeproj"): print("请使用-p指定.xcodeproj文件的路径") sys.exit(3) project = XcodeProject.load(project_path + '/project.pbxproj') # 设置 User-Defined (如果target_name是None,则每个target都会设置flag) project.set_flags('FLUTTER_BUILD_MODE', flutter_build_mode[1], target_name) project.save()

使用也很简单,终端直接输入如下命令

Shell

1

python switch_flutter_build_mode.py -p 'xxx/项目.xcodeproj' -t target名称 -m release

各参数说明

参数 用途

-p xcodeproj 文件的路径

-t target 名称

-m 编译模式 ( release、debug、profile )

PS: 脚本基于 Python3

我们是使用 Jenkins 进行打包并自动上传至蒲公英的,所以只需要在 Jenkins 中配置打包前调用该脚本即可。

最后再结合 Shuttle 这个软件,就可以实现以界面的方式去切换编译模式了

四、最后说两句

本文是基于 Flutter混合开发 进行说明的,如果有什么不对或不足的地方,欢迎指正,感谢大家的阅读

Flutter官方说明: https://flutter.dev/docs/development/ios-14

mod-pbxproj: https://github.com/kronenthaler/mod-pbxproj

Shuttle: http://fitztrev.github.io/shuttle

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容