Flutter - 低版本在iOS14上遇到的问题与解决方案
近期将测试机升级至 iOS14 ,测试使用 Flutter混合开发 的线上 APP,没发现什么问题,但是使用 Xcode 安装APP 的场景下,断开 Xcode 后再运行却闪退了。
+
一、概述近期将测试机升级至 iOS14 ,测试使用 Flutter混合开发 的线上 APP,没发现什么问题,但是使用 Xcode 安装APP的场景下,断开 Xcode 后再运行却闪退了。
公司的 APP 测试结果如下:
APP来源
是否闪退
模式
线上
否
release
蒲公英
是
debug
Xcode
是(断开 Xcode 后再打开 APP )
debug
问题原因闪退的原因是因为 Flutter SDK, Flutter 官方的更新速度也是快,对 iOS14 进行了说明: Flutter官网说明链接
大致意思就是说,如果我们在 iOS14 的真机上安装了 debug模式 编译出来的 flutter 应用,那么在断开编译安装连接后,将无法从桌面上打开该应用程序。
解决方案
再次是使用 Xcode 或 flutter run 来运行。
设置 Flutter ...
分享 - Flutter打造好用的打印工具类
如果我们可以在调用函数时拿到当前调用堆栈,就可以取到一系列想要的数据。
+
一、思考做 iOS 开发的同学都知道,我们在平时开发过程中,经常会用到非常实用的自定义打印功能,方便我们快速定位是在哪个控制器,哪一行代码。
在 OC 和 Swift 中都可以很轻松实现,因为系统本来就提供了用于日志输出的预处理宏,只要我们拿来拼接就可以了,这里以 Swift 的打印为例:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374enum LogType: String { case error = "❤️ ERROR" case warning = "💛 WARNING" case info = "💙 INFO" case debug = "💚 DEBUG"}let log = Logger.sharedfinal ...
解决 Could not find 'faraday' ... gem(s) (Gem::LoadError)
`to_specs’: Could not find ‘faraday’ (>= 0.7.4) among 77 total gem(s) (Gem::LoadError)
+
一、遇到的问题报错内容如下:1234567891011121314151617/Users/lxf/.fastlane/bin/bundle/lib/ruby/site_ruby/2.2.0/rubygems/dependency.rb:319:in `to_specs': Could not find 'faraday' (>= 0.7.4) among 77 total gem(s) (Gem::LoadError)Checked in 'GEM_PATH=/Users/lxf/.fastlane/bin/bundle/bin:/Users/lxf/.fastlane/bin/bundle/lib/ruby/gems/2.2.0', execute `gem env` for more information from /Users/lxf/.fastlane/bin/bundle/l ...
Flutter - 解决混合开发iOS脚本打包遇到的问题
使用Xcode手动打包是正常的,但是使用脚本打包会报错
+
使用 Xcode 手动打包是正常的,但是使用脚本打包会报错,错误如下:
123456The following build commands failed: PhaseScriptExecution [CP-User]\ Run\ Flutter\ Build\ Script .../Script-C3A097A8FE12FF5F875B057C.sh flutter build ios --releasethen re-run Archive from Xcode.Command PhaseScriptExecution failed with a nonzero exit code
定位错误
到 Flutter 环境目录下,按图上所示地址找到 xcode_backend.sh,也可以直接看 官方脚本链接
123456789101112# Archive builds (ACTION=install) should always run in release mode.if [[ "$ACTION" == "ins ...
Flutter - 混合开发
目前大多数公司都有自己开发多年的项目,不可能直接用 Flutter 从头开发一套,那样不实现,除非是小项目,因此只能是在原有的基础上用 Flutter 来开发新业务或重构旧业务,而这里就需要用到 Flutter 的 混合开发
+
目前大多数公司都有自己开发多年的项目,不可能直接用 Flutter 从头开发一套,那样不实现,除非是小项目,因此只能是在原有的基础上用 Flutter 来开发新业务或重构旧业务,而这里就需要用到 Flutter 的 混合开发
一、创建Flutter模块使用混合开发就不能像之前一样直接上来就创建一个 Flutter 项目,而是要使用 Flutter模板
12345# flutter_module_lxf 可以随便你命名flutter create --template module flutter_module_lxf# --template 可以替换为 -t# flutter create -t module flutter_module_lxf
创建出来的 Flutter 模块依然是可以像之前创建的Flutter项目 一样打开和运行的。
目录 ...
Flutter - 打印好用的Debug日志
做 iOS 开发时这个功能很常用, 在 OC 和 Swift 中都可以很轻松实现,因为系统本来就提供了用于日志输出的预处理宏,只要我们拿来拼接就可以了,但是在 Dart 中并不提供这些,那有什么办法实现它呢?
+
一、思考做 iOS 开发时这个功能很常用, 在 OC 和 Swift 中都可以很轻松实现,因为系统本来就提供了用于日志输出的预处理宏,只要我们拿来拼接就可以了,但是在 Dart 中并不提供这些,那有什么办法实现它呢?
我们回想在开发过程中,是不是发现只要一不小心抛异常,就可以看到类似如下的打印内容,而且还能清楚的知道异常是在哪个文件和哪一行的代码造成的。
所以如果我们可以在调用函数时拿到当前调用堆栈,就可以取到一系列想要的数据。
二、实践在 dart:core 中提供了 堆栈跟踪(StackTrace),可以通过 StackTrace.current 取到当前的堆栈信息,打印如下图所示,会发现这不好拿到我们想要的信息。
这里我用到了官方开发的一个包 stack_trace,它可以将堆栈信息变得更多人性化,并方便我们查看堆栈信息和获取想要的数据。
ps: st ...
Dart - 抽象类的实例化
抽象类不能用于创建实例,但是有没有发现,Dart 提供的 Map 和 List 就是抽象类,却可以直接使用它们创建出一个实例对象
+
一、抽象类的使用Dart 抽象类可以只声明方法,也可以有具体的方法实现,但是不能直接用抽象类来创建实例,只能被继承使用或者充当接口。
定义一个抽象类 Animal123456789abstract class Animal { // 仅声明eat方法 void eat(); // 声明方法,且有具体实现 void sleep() { print("睡觉"); }}
继承使用
123456789class Cat extends Animal { @override void eat() { print("喵喵吃"); sleep(); }// 可以不实现 sleep 方法}
充当接口1234567891011class Cat implements Animal { void eat() { print( ...
解决SecurityEnvSDK与SGMain的冲突问题
报错是说有重复类,解决的办法比较简单粗暴,就是把在Xcode里全文搜索-framework "SecurityEnvSDK",接着全文替换为空字符串就可以了。
+
问题在集成友盟统计和阿里百川之后项目报如下错误
123456789101112duplicate symbol '_OBJC_CLASS_$_tdvSFHFKeychainUtils' in: /Users/.../Pods/UMCSecurityPlugins/thirdparties/SecurityEnvSDK.framework/SecurityEnvSDK(SecurityEnvSDK99999999.o) /Users/.../阿里百川/WXFrameworks/SGMain.framework/SGMain(SGMain99999999.o)duplicate symbol '_OBJC_METACLASS_$_tdvSFHFKeychainUtils' in: /Users/.../Pods/UMCSecurityPlugins/thirdparties/Sec ...
解决Transporter一直卡正在验证的问题
苹果的上传应用工具 Transporter 虽然挺好用,但是估计也不少人跟我一样遇到过这样的问题,就是一直卡在 正在验证,不采取点措施估计能一直卡下去~
+
苹果的上传应用工具 Transporter 虽然挺好用,但是估计也不少人跟我一样遇到过这样的问题,就是一直卡在 正在验证,不采取点措施估计能一直卡下去~
其实原因很简单,就是 /User/当前登录用户/Library/Caches/com.apple.amp.itmstransporter 这个目录里的文件不全,一直处于下载更新的状态。
解决方案方案一科学上网前提下,在终端下执行 Transporter 包内的 iTMSTransporter,1/Applications/Transporter.app/Contents/itms/bin/iTMSTransporter因为国外服务器(contentdelivery.itunes.apple.com:443)对我们来说会很慢,所以这个过程最好弄下科学环境。
直到出现这个命令说明界面就可以了
方案二适用人群
没有科学环境
速度要求高的
比较懒的
可以使用 tra ...
FQ-Terminal下的代理工具ProxyChains-NG
是不是你也遇到过,在 Shadowsocks 使用 全局 模式下,终端依旧无法 ping 通谷歌?这是因为 Shadowsocks 仅针对代理应用软件,但是一些终端下执行的命令是无法代理的。所以本篇就来介绍一下如何使你的终端也走代理进行访问。
是不是你也遇到过,在 Shadowsocks 使用 全局 模式下,终端依旧无法 ping 通谷歌?这是因为 Shadowsocks 仅针对代理应用软件,但是一些终端下执行的命令是无法代理的。所以本篇就来介绍一下如何使你的终端也走代理进行访问。
方案一:终端下的all_proxy
这里以 zshrc + Shadowsocks 为例
打开 Shadowsocks,模式选为 PAC自动模式 或 全局模式
如果不是使用 .zshrc 就 编辑 ~/.bashrc,下面的同理
1、打开 .zshrc1vim ~/.zshrc
2、添加命令12alias proxy='export all_proxy=socks5://127.0.0.1:1086'alias unproxy='unset all_proxy'
3、使用 ...