前段时间有机会将flutter集成到一个新项目中,目前只改了一个静态的设置页,虽然flutter部分的功能简单,但是还是遇到了一些问题,记录一下,希望能帮到一些掉到坑里的朋友。
环境搭建
-
下载flutter sdk,解压后拷贝到指定路径(这里的路径很重要,之后需要在XCode项目配置里面用到)
-
配置flutter环境变量在~/.bash_profile(参考下面三行,可直接复制过去,但是需要改PATH为flutter sdk所在的路径),根目录下没有的bash_profile的话自己创建一个
export PUB_HOSTED_URL=https://pub.flutter-io.cn export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn export PATH=/Developer/flutter/bin:$PATH配置好之后执行一下source ~/.bash_profile就可以执行flutter命令了
-
执行flutter doctor根据提示解决还未完成的操作(Xcode,Android studio以及相应的flutter和dart插件等)
集成步骤
我采用的是cocoapods管理的方式
-
cd到当前项目平级目录下,执行下面的创建命令(注意:flutter_module为flutter模块名,可自定义,并且要以小写单词和_相连,否则创建不成功)
flutter create -t module flutter_module -
在podfile文件里加入一下三行命令
flutter_application_path = '../flutter_module' (这里注意路径) load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb') install_all_flutter_pods(flutter_application_path) -
pod install之后再Targets添加一个Run Script,内容如下
"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" embed添加完之后几个勾选
-
创建一个config文件夹后添加3个config:Flutter.xcconfig, Debug.xcconfig,Release.xcconfig
在Flutter.xcconfig文件中写入:
#include "../../../flutter_module/.ios/Flutter/Generated.xcconfig" ENABLE_BITCODE=NO
在Debug.xcconfig文件中写入:
#include "Flutter.xcconfig"
在Release.xcconfig文件中写入:
#include "Flutter.xcconfig" FLUTTER_BUILD_MODE=release
以上4个步骤操作完毕之后flutter环境就搭建好了,可以run一下代码看看有没有报错,没问题的话就可以开始写代码了。
FAQ
-
编译的时候会报错:Command PhaseScriptExecution failed with a nonzero exit code
解决方案:script配置完之后记得勾选上Run script only when installing, -
13.3.1及以上真机运行崩溃
给不想跳转的朋友摘录一下里面的解决方案
You can: 1. Use a non-Personal Team provisioning profile. 2. Run on the 13.3.1 simulator. 3. Test on a real iOS device running 13.3 or lower. 简单翻译一下就是使用非个人的开发者账号的证书跑真机,或者用模拟器跑13.3.1以上的版本,或 者用13.3及以下的真机跑 -
mac10.15及以上系统版本终端每次都需要输入source ~/.bash_profile
因为mac10.15以后系统使用 zsh 作为默认登录 Shell 和交互式 Shell 复制~/.bash_profile的内容到~/.zshrc即可,执行一下source ~/.zshrc即可 ```
- 团队其他成员或者换了环境之后拉取代码后无法pod install的问题
需要在flutter_module文件夹的路径等下执行 flutter pub get更新一下flutter依赖,再去ios项目目录下执行pod install