flutter 构建的 iOS debug包启动闪退问题处理

flutter 构建的 iOS debug包启动闪退问题处理

Posted by HuberyYang on April 20, 2021

flutter 构建的 iOS debug 包,安装到真机上启动后会闪退,这是由于flutter在平台的兼容性还有一些问题导致的。此时可以在打包前设置flutter构建模式为release就没有问题了,具体步骤如下:

手动操作

  • 在iOS目录下找到 Runner.xcodeproj
  • 右键选择显示包内容
  • 找到project.pbxproj 并打开
  • FLUTTER_BUILD_MODE 的值改为 release

脚本操作

每次打包前都手动改一次,想想都是很难受的事情,所以使用脚本就是必然选择了

# -*- coding:utf-8 -*-
import getopt
import sys
from pbxproj import XcodeProject

if __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('可用参数 -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)
        path = project_path + '/project.pbxproj'
        project = XcodeProject.load(path)
        # 设置 User-Defined (如果target_name是None,则每个target都会设置flag)
        project.set_flags('FLUTTER_BUILD_MODE', flutter_build_mode[1], target_name)
        project.save()

在打debug包之前执行上面的脚本,打出来的包在真机上就不会闪退了