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包之前执行上面的脚本,打出来的包在真机上就不会闪退了