cache failed module status_Flutter混编之路——iOS踩坑记录

一、运行Xcode编译或者flutter run/build 过程中报错:"x86_64" is not an allowed value for option "ios-arch".解决方案

在Debug.xcconfig中指定 “FLUTTER_BUILD_MODE=debug”,Release.xcconfig中指定“FLUTTER_BUILD_MODE=release”错误分析

这看起来是在模拟器编译环境下选择了真机的Framework什么的,后来查询发现是没有设置这个变量。因为工程的Build Phases里运行了相关命令,而xcode_backend里为build_mode变量设置了默认值"release",这使得在查找Flutter.framework等编译所需的“原材料”时,默认选择了release的目录,导致了这个错误,所以,加上debug这个设置后,会去ios这个目录中查找相关文件,就不会有问题了。附目录截图:

注:所在目录 flutter/bin/cache/artifacts/engine/

二、Flutter plugin not installed; this adds Flutter specific functionality. Dart plugin not installed; this adds Dart specific functionality解决方案

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生成双端产物的时候,需要经过插件做一些操作。

三、Android license status unknown解决方案

执行 “flutter doctor --android-licenses” 命令

会问你'Do you want to review the licenses?',输入“y” 然后 回车,这时再执行一次flutter doctor就好了

四、MissingPluginException(No implementation found for method xxx on channel xxx)解决方案

方案一:flutter clean一下,再次 flutter run/build

方案二:将flutter run的进程终止掉重新 flutter run/build

方案三:看看你的FlutterPluginRegistrant产物是否存在,是否更新了错误分析

问题本质是Plugin的方法没有找到,也可能是Plugin本身就没有注册成功。老版本的Flutter SDK遇到这个问题可能是没有触发GeneratedPluginRegistrant.register(this),新版本的已经不需要手动触发了。

五、Waiting for another flutter command to release the startup lock解决方案

rm ./flutter/bin/cache/lockfile错误分析

原因是在flutter编译等操作运行过程中,会创建一个文件锁,但是由于一些原因锁没有释放导致的,而且一直无法释放……

六、'Flutter/Flutter.h' file not found解决方案

方案一:如果集成方式是静态库(.a),需要在引用Flutter的工程中,修改Build settings中的Header Search Paths,将Flutter所在目录加入其中。

方案二:如果集成方式是动态库(.framework),说明在引用Flutter的工程中并没有依赖成功,需要检查Flutter.framework包内是否包含Headers文件夹,是否其中包含Flutter.h,另外就是Podspec和podfile是否正确。还有,Cocoapods必须1.5版本及以上。

方案三:如果你用的podspec.json,试试改写成podspec(这个坑曾让我浪费了几天的时间……)

七、error: cannot parse the debug map for xxx: No such file or directory解决方案

依赖产物只针对 真机 ,但调试中使用了另一种 模拟器。或者反过来了。错误分析

真机和模拟器的平台是不同的,符号也不同。

八、diff: /../Podfile.lock: No such file or directory解决方案

方案一:重新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的锅……

九、Flutter Bitcode解决方案

在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

十、module importing failed: ('invalid syntax', ('temp.py',xxx解决方案

执行以下命令

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

十一、Flutter集成到现有工程后,性能问题解决方案

用Release产物集成问题分析

为了实现Hot refresh功能,Flutter在Debug下做了很多工作,影响了性能,可以通过修改

FLUTTER_BUILD_MODE的值("debug" => "release")

使用Release产物集成的方式屏蔽这部分影响。注意,flutter_assets是需要同时更新的,Debug产物中含有kernel_blob.bin文件,Release产物则没有。

十二、iOS系统中,第一次从Native跳转到Flutter页面时,会出现LaunchScreen解决方案

采用继承、Category同名方法等方式,覆盖FlutterViewController的splashScreenView的get方法,直接返回成员变量,将中间的读取LaunchScreen页面过程覆盖掉,甚至可以自定义自己的逻辑。问题分析

Flutter的渲染是异步的,第一次加载需要创建Application和页面,无法及时返回结果,所以Flutter自己把这部分逻辑加到了SDK内部,其实是为了解决 “纯Flutter App首屏白屏” 问题,但给我们这种混编的App带来了麻烦。

以上是我们到目前为止遇到的主要坑位,以及解决方案和原因分析,Flutter无论从性能还是人效方面来讲,都会在熟悉之后节省不少成本,希望各位能从我们的经验中节省更多宝贵的时间。同时,也希望大家把更多的埋坑记录发到评论里,帮助友队一起学习,一起成长。欢迎技术交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【最短路径Floyd算法详解推导过程】看完这篇,你还能不懂Floyd算法?还不会?...

简介 Floyd-Warshall算法(Floyd-Warshall algorithm),是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特…

java object类的常用子类_Java中Object类常用的12个方法,你用过几个?

前言Java 中的 Object 方法在面试中是一个非常高频的点,毕竟 Object 是所有类的“老祖宗”。Java 中所有的类都有一个共同的祖先 Object 类,子类都会继承所有 Object 类中的 public 方法。先看下 Object 的类结构(快捷键:alt7):1.…

leetcode面试题 04.12. 求和路径(dfs)

给定一棵二叉树,其中每个节点都含有一个整数数值(该值或正或负)。设计一个算法,打印节点数值总和等于某个给定值的所有路径的数量。注意,路径不一定非得从二叉树的根节点或叶节点开始或结束,但是其方向必须向下(只能从父节点指向子…

javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册

一、ServletJSPJavaBean开发模式(MVC)介绍 ServletJSPJavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据。 ServletJSPJavaBean模式程序各个模块之间层次清晰&…

2018黄河奖设计大赛获奖_宣布我们的freeCodeCamp 2018杰出贡献者奖获奖者

2018黄河奖设计大赛获奖by Quincy Larson昆西拉尔森(Quincy Larson) 宣布我们的freeCodeCamp 2018杰出贡献者奖获奖者 (Announcing Our freeCodeCamp 2018 Top Contributor Award Winners) Over the past 3 years, freeCodeCamp.org has grown from a small open source proje…

Log4j配置详解

来自: http://www.blogjava.net/zJun/archive/2006/06/28/55511.html Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接keyvalue格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。1. 配置文件 …

cors数据类型_如何根据RTK的差分格式选择千寻cors账号的源节点进行设置?

千寻cors账号的设置中源节点是根据使用的品牌RTK是为双星仪器还是三星仪器选择,但问题就在于我们看到的RTK的技术参数中一般很少见到标注仪器的卫星系统,更多的是差分格式。其实千寻cors账号的源节点也可以根据RTK的差分格式进行选择,不过这两…

java swing 串口_ComTest 接收串口数据,并显示在文本框内,通过JavaSwing实现 Develop 265万源代码下载- www.pudn.com...

文件名称: ComTest下载 收藏√ [5 4 3 2 1 ]开发工具: Java文件大小: 3157 KB上传时间: 2016-09-21下载次数: 0提 供 者: 韩坤详细说明:接收串口数据,并显示在文本框内,通过JavaSwing实现-Receive serial data, and displayed in the t…

leetcode329. 矩阵中的最长递增路径(dfs)

给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。示例 1:输入: nums [[9,9,4],[6,6,8…

SQL大圣之路笔记——PowerDesigner之新建table、view、proc

1. 新建table、view、proc 转载于:https://www.cnblogs.com/allenzhang/p/6305564.html

用python绘制一条直线_python绘制直线的方法

本文实例为大家分享了python绘制直线的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下#!/usr/bin/env pythonimport vtk# 绘制通用方法def myshow(linepolydata):# Now well look at it.lineMapper vtk.vtkPolyDataMapper()if vtk.VTK_MAJOR_VERSION < 5:lineMap…

测试驱动开发 测试前移_我如何以及为什么认为测试驱动开发值得我花时间

测试驱动开发 测试前移by Ronauli Silva通过罗纳利席尔瓦(Ronauli Silva) I first read about test driven development (TDD) in some technical reviews blog, but I barely read it (or thought about it). Why would people write tests first when they already knew the…

P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm

对于一个牛&#xff0c;它存在两种状态&#xff1a;1.处于联通分量 2.不处于联通分量。对于处于联通分量的牛&#xff0c;求出联通分量的大小&#xff1b;对于不处于联通分量的牛&#xff0c;求出其距离联通分量的路程联通分量大小。 不同的联通分量&#xff0c;染上不同的颜色…

ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)

开发工具&#xff1a;VS2015(2012以上)SQL2008R2以上数据库 您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB 升级后界面效果如下&#xff1a; 日程管理 http://www.cnblogs.com/ymnets/p/7094914.html 任务调度系统界面 http://www.cnblogs.com/ymnets/p/5065154.h…

leetcode106. 从中序与后序遍历序列构造二叉树(dfs)

根据一棵树的中序遍历与后序遍历构造二叉树。注意: 你可以假设树中没有重复的元素。例如&#xff0c;给出中序遍历 inorder [9,3,15,20,7] 后序遍历 postorder [9,15,7,20,3] 返回如下的二叉树&#xff1a;3/ \9 20/ \15 7解题思路 根据后序遍历的最后一个元素是父节点&…

【FRDM-K64F学习笔记】使用ARM mbed和Keil MDK下载你的第一个程序

FRDM-K64F开发平台采用MK64FN1M0VLL12微控制器。该控制器包含一个带有浮点单元的ARM Cortex-M4内核。其最高工作频率为120MHz&#xff0c;具有256KB的RAM、1MB闪存以及许多其他外设。它非常适合大多数可以采用以太网、SD卡存储以及板载模拟-数字转换器的IoT应用。但是&#xff…

php 实时更新内容_亿级视频内容如何实时更新?优酷视频背后的技术揭秘

简介&#xff1a; 优酷视频内容数据天然呈现巨大的网络结构&#xff0c;各类数据实体连接形成了数十亿顶点和百亿条边的数据量&#xff0c;面对巨大的数据量&#xff0c;传统关系型数据库往往难以处理和管理&#xff0c;图数据结构更加贴合优酷的业务场景&#xff0c;图组织使用…

ios集成firebase_如何使用Firebase将Google Login集成到Ionic应用程序中

ios集成firebaseby Ryan Gordon通过瑞安戈登(Ryan Gordon) 如何使用Firebase将Google Login集成到Ionic应用程序中 (How to integrate Google Login into an Ionic app with Firebase) A lot of apps these days need to maintain some form of user authentication. This hel…

面向对象三大核心特点,封装、继承和多态

封装 封装其实是一种思想&#xff0c;将事物状态和功能装进一个容器&#xff0c;那么这个容器在python中就是类&#xff0c;由这个类产生的对象都拥有类的属性和功能 在面向对象的思想中&#xff0c;推崇将具有某些共同特征的事物归为一类&#xff0c;那么这些事物就可以看做是…

java编写某计算器控制台程序_用java程序编写一个计算器

点击查看用java程序编写一个计算器具体信息答&#xff1a;给你一个参考&#xff0c;希望不要被百度吞了当晚餐 import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.text.Decimal…