iOS下的flutter混编1:统一环境

前提

为什么要统一环境?
1、前面提到flutter统一环境采用了flutterw,实际项目中遇到了flutter使用了两套不同环境的问题,所以弃用flutterw,统一flutter版本环境。
2、为后面的Jenkins构建flutter产物做准备。

实现

1、要想统一环境就必须在组内规定好flutter的安装版本及dart版本
flutter version

2、在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环境的对应位置即可完美运行。

你可能感兴趣的:(iOS下的flutter混编1:统一环境)