项目配置
ps:iOS项目或Android项目必须和flutter项目在同一个层级
1、创建flutter_module
如果iOS项目地址在xxx/xx_workspace/ios_prj,则执行下方代码
$ cd xxx/xx_workspace/
$ flutter create -t module flutter_module_prj # 项目名称必须全部小写,不能有驼峰
出现下面代码就代表 flutter_model 创建成功了
项目文件结构如下:
文件名称解释如下:
2、为已存在的iOS项目添加flutter_module依赖
该过程中需要依赖cocoapod工具,没有请先按照。
cocoapod最新ruby地址:gem sources --add https://gems.ruby-china.com
如果iOS项目中没有的使用cocoapod,则请先进入项目根目录使用下方命令
在podfile文件中添加下方代码
# 配置
flutter_application_path = '../flutter_module/'
load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')
target 'iOSFlutterHybrid' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for iOSFlutterHybrid
# 配置
install_all_flutter_pods(flutter_application_path)
target 'iOSFlutterHybridTests' do
inherit! :search_paths
# Pods for testing
end
target 'iOSFlutterHybridUITests' do
# Pods for testing
end
更新pod
$ pod install
控制台输出如下:
Analyzing dependencies
Downloading dependencies
Installing Flutter (1.0.0)
Installing FlutterPluginRegistrant (0.0.1)
Installing flutter_module (0.0.1)
Generating Pods project
Integrating client project
[!] Please close any current Xcode sessions and use `iOSFlutterHybrid.xcworkspace` for this project from now on.
Pod installation complete! There are 3 dependencies from the Podfile and 3 total pods installed.
[!] Automatically assigning platform `iOS` with version `13.2` on target `iOSFlutterHybrid` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.
成功后如下如结构:
这里我们看到有三个依赖安装完成了。并提醒我们关闭当前项目,在根目录下面使用iOSFlutterHybrid.xcworkspace来打开运行项目。这里可能很多人在执行命令的时候会发现提示0个依赖完成。这里有可能是你的Xcode版本的问题。因为Flutter要求最低版本是10.2及以上。
当在flutter_module/pubspec.yaml中添加一个Flutter插件时,需要在flutter_module目录下运行:
flutter packages get
来刷新podhelper.rb脚本中的插件列表,然后在iOS目录下运行:
pod install
这样podhelper.rb脚本才能确保添加的插件和Flutter.framework能够添加到iOS项目中。
目前Flutter还不支持Bitcode,所以集成了Flutter的iOS项目需要禁用Bitcode。
在以下路径下找到Bitcode并禁用:
Build Settings->Build Options->Enable Bitcode
flutter以前的版本是需要添加build phase以构建Dart代码,但是最新的版本已经不需要添加了,可以自动构建。
ps:当在flutter项目中添加了新的插件依赖时,应该iOS项目也执行对应更新podhelper.rb文件,这样才能保持插件同步。
$ flutter packages get # flutter项目
$ pod install # iOS 项目
具体如下图:
遇到问题一:
在添加了flutter项目混合开发运行时会出现下方错误ios打包失败:
/Frameworks/Flutter.framework: Permission denied
方案1:该问题为flutter自身问题,在master分支最新版1.10.2已经修复这个问题,更新一下就好,更新版本之后明显看到flutter修复了这个问题,这是flutter官方的一个bug,查资料说flutter升级到1.10就好了
具体原因分析:flutter在集成到现有iOS工程中,flutter在编译时默认对Flutter.framework做了签名操作,导致在我们自己的宿主工程运行时,对动态库flutter做签名时冲突。
方案2:不升级flutter的情况下,可以改Flutter SDK 的一个文件,flutter/packages/flutter_tools/bin/xcode_backend.sh
旧的
RunCommand find "${derived_dir}/engine/Flutter.framework" -type f -exec chmod a-w "{}" ;
替换 =>
新的
RunCommand find "${derived_dir}/engine/Flutter.framework" -type f -iname '.h' -exec chmod a-w "{}" ;
遇到问题二:
Mac flutter 弹出提示 无法打开“idevice_id”,因为无法验证开发者 的 解决方法
1、先执行 sudo spctl --master-disable
此步骤也通常用来解决 mac打开软件时提示软件已损坏或无法验证 的错误
2、再执行以下命令,【flutter解压后的目录】 需要替换成 你自己的对应目录
sudo xattr -r -d com.apple.quarantine 【flutter解压后的目录】/flutter/bin/cache/artifacts/libimobiledevice/idevice_id
sudo xattr -r -d com.apple.quarantine 【flutter解压后的目录】/flutter/bin/cache/artifacts/libimobiledevice/idevicename
sudo xattr -r -d com.apple.quarantine 【flutter解压后的目录】/flutter/bin/cache/artifacts/libimobiledevice/idevicescreenshot
sudo xattr -r -d com.apple.quarantine 【flutter解压后的目录】/flutter/bin/cache/artifacts/libimobiledevice/idevicesyslog
sudo xattr -r -d com.apple.quarantine 【flutter解压后的目录】/flutter/bin/cache/artifacts/libimobiledevice/ideviceinfo
3、去运行flutter吧,应该可以了,Good luck。