Flutter多Flavor环境下,如何在fastlane iOS构建中指定main.dart变体?
Flutter多Flavor iOS构建指定自定义main入口的解决方案
在iOS端用fastlane构建时,没法直接通过build_app传递类似Android的-Ptarget参数,得先通过Flutter命令预编译对应入口的产物,再执行Xcode构建。具体改法如下:
修改fastlane lane代码
在调用build_app前先执行Flutter编译命令,指定你的变体入口文件:
private_lane :build4iOS do |options| # 先编译对应Flavor的Dart代码,替换成你的变体入口路径 sh("flutter build ios --target=lib/main_#{options[:flavor]}.dart --configuration=#{myConfiguration}") build_app( workspace: "./#{$project_name}.xcworkspace", configuration: myConfiguration, scheme: myScheme, silent: false, clean: false, # 关闭Xcode的clean,避免清空Flutter编译产物 export_options:{ manageAppVersionAndBuildNumber: false, method: options[:export_options] } ) end
关键注意点
- 用
sh执行Flutter命令,--target参数直接指定你的变体入口(比如main_dev.dart、main_prod.dart),可以通过lane的options[:flavor]动态传值适配不同环境。 - 把
build_app里的clean设为false,因为Flutter编译已经处理了必要的清理和产物生成,重复clean会导致Xcode找不到Flutter的编译结果。
可选:动态传入target路径
如果需要更灵活的配置,把target路径做成lane参数:
private_lane :build4iOS do |options| # 默认用main.dart,也可通过参数指定 target_file = options[:target] || "lib/main.dart" sh("flutter build ios --target=#{target_file} --configuration=#{myConfiguration}") build_app( workspace: "./#{$project_name}.xcworkspace", configuration: myConfiguration, scheme: myScheme, silent: false, clean: false, export_options:{ manageAppVersionAndBuildNumber: false, method: options[:export_options] } ) end
调用时直接传参数:fastlane build4iOS target:lib/main_flavor.dart export_options:app-store
内容的提问来源于stack exchange,提问作者Abbas Haider
相关产品推荐
相关产品推荐

