发表日期:2018-11 文章编辑:小灯 浏览次数:12468
解决方案
在Debug.xcconfig中指定 “FLUTTER_BUILD_MODE=debug”,Release.xcconfig中指定“FLUTTER_BUILD_MODE=release”
错误分析
这看起来是在模拟器编译环境下选择了真机的Framework什么的,后来查询发现是没有设置这个变量。因为工程的Build Phases里运行了<"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build>相关命令,而xcode_backend里为build_mode变量设置了默认值"release",这使得在查找Flutter.framework等编译所需的“原材料”时,默认选择了release的目录,导致了这个错误,所以,加上debug这个设置后,会去ios这个目录中查找相关文件,就不会有问题了。附目录截图:
注:所在目录 flutter/bin/cache/artifacts/engine/
解决方案
1.) Start the Android Studio application
2.) Open plugin preferences (Preferences>Plugins on macOS, File>Settings>Plugins on Windows & Linux).
3.) Select Browse repositories…, select the Flutter plug-in and click install .
4.) Click Yes when prompted to install the Dart plugin.
5.) Click Restart when prompted.
错误分析
如果你使用的是iOS开发环境或者没有安装Flutter插件的Android Studio,会报这个错误。Flutter是Google开发的移动开发SDK,为了方便,基于自己的IDE开发了Flutter插件,以方便集成过程。在Flutter生成双端产物的时候,需要经过插件做一些操作。
解决方案
执行 “flutter doctor --android-licenses” 命令
会问你'Do you want to review the licenses?',输入“y” 然后 回车,这时再执行一次flutter doctor就好了
解决方案
方案一:flutter clean一下,再次 flutter run/build
方案二:将flutter run的进程终止掉重新 flutter run/build
方案三:看看你的FlutterPluginRegistrant产物是否存在,是否更新了
错误分析
问题本质是Plugin的方法没有找到,也可能是Plugin本身就没有注册成功。老版本的Flutter SDK遇到这个问题可能是没有触发GeneratedPluginRegistrant.register(this),新版本的已经不需要手动触发了。
解决方案
rm ./flutter/bin/cache/lockfile
错误分析
原因是在flutter编译等操作运行过程中,会创建一个文件锁,但是由于一些原因锁没有释放导致的,而且一直无法释放……
解决方案
方案一:如果集成方式是静态库(.a),需要在引用Flutter的工程中,修改Build settings中的Header Search Paths,将Flutter所在目录加入其中。
方案二:如果集成方式是动态库(.framework),说明在引用Flutter的工程中并没有依赖成功,需要检查Flutter.framework包内是否包含Headers文件夹,是否其中包含Flutter.h,另外就是Podspec和podfile是否正确。还有,Cocoapods必须1.5版本及以上。
方案三:如果你用的podspec.json,试试改写成podspec(这个坑曾让我浪费了几天的时间……)
解决方案
依赖产物只针对 真机 ,但调试中使用了另一种 模拟器。或者反过来了。
错误分析
真机和模拟器的平台是不同的,符号也不同。
解决方案
方案一:重新pod install
方案二:删除workspace、podfile.lock、Pods/、~/Library/Developer/Xcode/DerivedData
方案三:
1、运行sudo gem install cocoapods-deintegrate安装快速解除项目cocopods依赖的库
2、安装成功后,cd到你项目的更目录运行pod deintegrate解除项目cocopods依赖
3、运行pod install,重新安装cocopods
错误分析
Cocoapods的锅……
解决方案
在podfile中禁止bitcode
错误分析
Flutter相关集成是不支持bitcode的,所以需要将相关产物的bitcode功能关闭。如果你的现有工程中仓库众多,有的仓库是必须bitcode的,这样的话就需要每次pod install之后再在工程配置中手动设置回来,以下脚本放在podfile中可以解决此问题。
post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name =="App" || target.name =="Flutter"
target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] ='NO'
end
end
end
end
解决方案
执行以下命令
brew update
brew uninstall --ignore-dependencies libimobiledevice ios-deploy cocoapods
brew uninstall --ignore-dependencies usbmuxd
brew install --HEAD usbmuxd
brew unlink usbmuxd
brew link usbmuxd
brew install --HEAD libimobiledevice
brew install ideviceinstaller ios-deploy cocoapods
解决方案
用Release产物集成
问题分析
为了实现Hot refresh功能,Flutter在Debug下做了很多工作,影响了性能,可以通过修改
FLUTTER_BUILD_MODE的值("debug" => "release")
使用Release产物集成的方式屏蔽这部分影响。注意,flutter_assets是需要同时更新的,Debug产物中含有kernel_blob.bin文件,Release产物则没有。
解决方案
采用继承、Category同名方法等方式,覆盖FlutterViewController的splashScreenView的get方法,直接返回成员变量,将中间的读取LaunchScreen页面过程覆盖掉,甚至可以自定义自己的逻辑。
问题分析
Flutter的渲染是异步的,第一次加载需要创建Application和页面,无法及时返回结果,所以Flutter自己把这部分逻辑加到了SDK内部,其实是为了解决 “纯Flutter App首屏白屏” 问题,但给我们这种混编的App带来了麻烦。
以上是我们到目前为止遇到的主要坑位,以及解决方案和原因分析,Flutter无论从性能还是人效方面来讲,都会在熟悉之后节省不少成本,希望各位能从我们的经验中节省更多宝贵的时间。同时,也希望大家把更多的埋坑记录发到评论里,帮助友队一起学习,一起成长。欢迎技术交流!
日期:2018-10 浏览次数:7120
日期:2018-12 浏览次数:4184
日期:2018-07 浏览次数:4739
日期:2018-12 浏览次数:4031
日期:2018-09 浏览次数:5363
日期:2018-12 浏览次数:9782
日期:2018-11 浏览次数:4681
日期:2018-07 浏览次数:4452
日期:2018-05 浏览次数:4731
日期:2018-12 浏览次数:4186
日期:2018-10 浏览次数:5005
日期:2018-12 浏览次数:6079
日期:2018-11 浏览次数:4326
日期:2018-08 浏览次数:4443
日期:2018-11 浏览次数:12467
日期:2018-09 浏览次数:5436
日期:2018-12 浏览次数:4706
日期:2018-10 浏览次数:4048
日期:2018-11 浏览次数:4398
日期:2018-12 浏览次数:5927
日期:2018-06 浏览次数:3869
日期:2018-08 浏览次数:5310
日期:2018-10 浏览次数:4336
日期:2018-12 浏览次数:4344
日期:2018-07 浏览次数:4225
日期:2018-12 浏览次数:4375
日期:2018-06 浏览次数:4254
日期:2018-11 浏览次数:4232
日期:2018-12 浏览次数:4124
日期:2018-12 浏览次数:5139
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.