前言
前段时间在做一个Flutter相关的App开发的时候,iPhone手机在连接Mac电脑,然后运行VS Code启动Flutter程序,然后可以正常安装到手机上,但是安装之后更新了手机的系统,而且手机系统更新到最新的iOS 14.4,然后重新打开手机里面安装的Flutter程序,然后遇到了程序启动问题,那么本文就来分析一下具体原因和解决方法。
报错提示
手机系统更新到iOS 14.4以后,运行手机安装的Flutter程序,然后程序运行不起来,并提示如下信息:
代码语言:javascript复制In iOS 14 ,debug mode Flutter apps can only be launched from Flutter tooling, IDEs with Flutter plugins or from Xcode.
Alternatively,build in profile or release modes to enable launching from the home screen.
分析
首先来分析一下上述报错的英文,直接翻译一下,翻译之后的意思如下所示:
代码语言:javascript复制在iOS 14 中,调试模式的Flutter应用程序只能从Flutter工具里面启动运行,IDEs(包括VS Code、Android Studio)有Flutter插件或Xcode启动。
或者,构建的时候使用配置文件或使用release模式,以支持能够从主屏幕启动。
报错原因
在debug模式下,Flutter的热重载是把默认编译方式改为JIT,但是在iOS 14系统以后,苹果系统对JIT的编译模式进行了限制,造成在debug模式下基于Flutter的App运行不起来。
分析之后
通过分析上述提示的文字之后,得到了两种解决方法来处理上述报错问题。
注意事项
通过XCode直接打开Flutter应用程序,直接打开XCode的设置选项,把编译模式修改为release模式,然后重新连接手机,运行程序,运行成功之后,断开连接,重新在手机里打开程序,可以正常运行。
但是如果用Xcode12版本运行项目连接手机进行Flutter应用安装,然后手机断开与电脑连接,再次打开手机安装的应用程序,一定会闪退,所以该方式不行。
解决步骤
解决上述错误提示有两种方式:方法一是直接使用Flutter的release模式,方法二是直接使用profile。
方法一:
通过直接使用Flutter的release模式来解决上述错误,直接在项目启动的终端里面输入命令行:
代码语言:javascript复制flutter run --release
回车,然后即可运行Flutter的release模式,然后断开手机与电脑的连接,再次打开手机里面安装的这个Flutter应用,不再闪退。
方法二:
找到电脑上面安装的Flutter文件位置,直接找到flutter/packages/flutter_tools/bin/xcode_backend.sh文件,直接把Flutter的编译模式设置为release模式,手机重新连接电脑运行程序,然后断开电脑连接,再次打开手机上安装的app应用,即可正常打开运行程序不闪退。
建议使用方法一来解决上述问题,使用命令行flutter run --release的方式来操作,很方便。