此文章编辑于flutter1.2版本, flutter后续版本有所变化
最近遇到一个需求,ios原生在不配置flutter环境的情况下,集成flutter模块;Google官方发布的集成方式在此情境下不太适用, 所以写了一个脚本可以快速的把flutter的资源整合, 一键打包成iOS项目可用的产物(这里都是废话,直接看下面的)
前要:把"根目录/ios/Podfile" 文件里加上 use_frameworks!
#加use_frameworks!编译后第三方插件会生成.framework,
use_frameworks!
#不加use_frameworks!第三方插件会生成.a;
新建文件build_for_ios.txt, 把下方代码赋值进去, build_for_ios.txt改后缀名为 build_for_ios.sh, 至此已拥有build_for_ios.sh
build_for_ios.sh
#前提flutter一定要是app项目: pubspec.yaml里 不要加
#module:
# androidPackage: com.example.myflutter
# iosBundleIdentifier: com.example.myFlutter
echo "Clean old build"
find . -d -name "build" | xargs rm -rf
flutter clean
rm -rf build
rm -rf build_for_ios
echo "开始获取 packages 插件资源"
flutter packages get
echo "开始构建 release for ios"
flutter build ios --release --no-codesign
echo "构建 release 已完成"
echo "开始 处理framework和资源文件"
mkdir build_for_ios
#######分割线######
cp -r build/ios/Release-iphoneos/*/*.framework build_for_ios
#cp -r build/ios/Release-iphoneos/*/*.a build_for_ios
cp -r ios/Flutter/App.framework build_for_ios
#注意注意:flutter 1.2版本后flutter_assets的位置变了, (直接build到app.framework里面了,不必手动处理它了)
#cp -r build/flutter_assets build_for_ios
cp -r ios/Flutter/Flutter.framework build_for_ios
cp -r ios/Runner/GeneratedPluginRegistrant.* build_for_ios
#******特***别***注***意***
#如果flutter生成的ios项目在.ios目录 则需要把上方脚本里的ios改为.ios
#******特***别***注***意***
#下一步处理 如何自动生成podspec
#下下一步处理 如何自动发布pod
01把build_for_ios.sh复制到flutter项目根目录,
02在终端cd到flutter根目录,输入"bash build_for_ios.sh" 回车
03稍等片刻,所有产物都copy到build_for_ios文件夹
注意注意:flutter 1.2版本后flutter_assets的位置变了, (直接build到app.framework里面了,不必手动处理它了)
关于如何快速集成到ios项目,请看另一篇帖子https://www.jianshu.com/p/329120e0544a
关于如何把Flutter编译后的文件以pod形式发布到远端https://www.jianshu.com/p/b319b373e82b
分割线
看到很多人反馈生成的是.a而不是.framework 这里说一下怎么处理
1.找到flutter模块中自动生成的iOS项目
(可能存在.ios文件夹中, 也可能存在ios文件夹中)
2.找到podfile文件(没有的话可以新建一个)
添加"use_frameworks!" 例如下方示例:
platform :ios, '8.0'
use_frameworks!
target 'Runner' do
flutter_application_path = '../'
eval(File.read(File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')), binding)
end
3.再次执行打包脚本 即可正常生成.framework文件