iOS下的flutter混编1:统一环境
2019-06-26 本文已影响0人
青年别来无恙
前提
为什么要统一环境?
1、前面提到flutter统一环境采用了flutterw,实际项目中遇到了flutter使用了两套不同环境的问题,所以弃用flutterw,统一flutter版本环境。
2、为后面的Jenkins构建flutter产物做准备。
实现
1、要想统一环境就必须在组内规定好flutter的安装版本及dart版本 flutter version2、在flutter_module内怎么去找到本机的flutter安装目录
从flutter工程生成的iOS依赖目录中的Generated.xcconfig文件进行解析,找到FLUTTER_ROOT,就是当前机器安装的flutter目录。
Generated.xcconfig
ruby解析脚本如下:
# 解析文件内容为字典数组
# 文件内容格式为 A=B换行C=D 的类型
# 如 A=B
# C=D
# 解析为:
# {"A"="B","C"="D"}
def parse_KV_file(file, separator='=')
file_abs_path = File.expand_path(file)
if !File.exists? file_abs_path
return [];
end
pods_array = []
skip_line_start_symbols = ["#", "/"]
File.foreach(file_abs_path) { |line|
next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
plugin = line.split(pattern=separator)
if plugin.length == 2
podname = plugin[0].strip()
path = plugin[1].strip()
podpath = File.expand_path("#{path}", file_abs_path)
pods_array.push({:name => podname, :path => podpath});
else
puts "Invalid plugin specification: #{line}"
end
}
return pods_array
end
# 这是个函数,功能是从flutter工程生成的iOS依赖目录中的Generated.xcconfig文件解析
# FLUTTER_ROOT目录,也就是你安装的flutter SDKf根目录
def flutter_root(f)
generated_xcode_build_settings = parse_KV_file(File.join(f, File.join('.ios', 'Flutter', 'Generated.xcconfig')))
if generated_xcode_build_settings.empty?
puts "Generated.xcconfig must exist. Make sure `flutter packages get` is executed in ${f}."
exit
end
generated_xcode_build_settings.map { |p|
if p[:name] == 'FLUTTER_ROOT'
return p[:path]
end
}
end
最后
通过以上脚本获取flutter安装目录,传到项目所需flutter环境的对应位置即可完美运行。