当前位置: 首页 > news >正文

Flutter问题记录 - 适配Xcode 16和iOS 18

文章目录

  • 前言
  • 开发环境
  • 问题及解决方案
    • 1. Upload Symbols Failed
    • 2. type 'UIApplication' does not conform to protocol 'Launcher'
    • 3. method does not override any method from its superclass
  • 最后


前言

为了新的镜像功能升级了macOS 15和iOS 18,Xcode也不可避免的需要升级到Xcode 16,老版本没办法在新系统上使用。每次大版本升级,带来新功能的同时也会带来一些问题,需要去适配去修复。

但有一说一,这个镜像功能真好用,声音/通知都会转发到电脑上,最重要的是,真机调试可以直接在电脑上操作,无需拿起手机

开发环境

  • Flutter: 3.22.3
  • Xcode: 16.0
  • iOS: 18.0

问题及解决方案

1. Upload Symbols Failed

项目打包上传到AppStore出现如下警告提示:
screenshot1

看提示是缺少符号文件。这个问题已经修复了,相关issuePR如下:

  • Flutter application missing framework dSYMs, validation error “The archive did not include a dSYM for the Flutter.framework with the UUIDs”
  • [iOS] Bundle dSYM packages in Flutter.xcframework

可以将Flutter升级到当前最新版本3.24.3解决该问题。不过,由于该版本的字体渲染有问题,所以我还是继续降级使用,毕竟只是个警告,目前暂时还不影响提交上架。

2. type ‘UIApplication’ does not conform to protocol ‘Launcher’

这是关于url_launcher库的报错:

.../url_launcher_ios-6.3.0/ios/url_launcher_ios/Sources/url_launcher_ios/Launcher.swift:22:1: error: type 'UIApplication' does not conform to protocol 'Launcher'
extension UIApplication: Launcher {}
^
UIKit.UIApplication:24:15: note: candidate has non-matching type '(URL, [UIApplication.OpenExternalURLOptionsKey : Any], (@MainActor @Sendable (Bool) -> Void)?) -> Void'open func open(_ url: URL, options: [UIApplication.OpenExternalURLOptionsKey : Any] = [:], completionHandler completion: (@MainActor @Sendable (Bool) -> Void)? = nil)^
.../url_launcher_ios-6.3.0/ios/url_launcher_ios/Sources/url_launcher_ios/Launcher.swift:15:8: note: protocol requires function 'open(_:options:completionHandler:)' with type '(URL, [UIApplication.OpenExternalURLOptionsKey : Any], ((Bool) -> Void)?) -> ()'; add a stub for conformancefunc open(^

结合源码,可知问题出在了Launcher协议中的open方法,UIApplicationopen方法新增了@MainActor@Sendable修饰,导致方法签名不匹配报错。

目前通过定义新包装类DefaultLauncher的方式,修复了该问题,详情请看:

  • [ios]Fix compile error when conforming UIApplication to Launcher due to MainActor annotation

除了定义新包装类的方式,Launcher协议中的open方法增加@MainActor@Sendable修饰应该也能修复问题。

按理说,升级项目中的url_launcher库后该问题应该就解决了,但是针对这个问题,url_launcher库并没有发布新版本,只有它所依赖的url_launcher_ios库发布了6.3.1新版本。你可以参考以下两种方法解决这个问题:

  1. 修改pubspec.lock文件:
url_launcher_ios:dependency: transitivedescription:name: url_launcher_iossha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063eurl: "https://pub.flutter-io.cn"source: hostedversion: "6.3.0"

删除sha256这一行以及将version改为6.3.1,然后重新运行pub get

  1. 修改pubspec.yaml文件:
dependency_overrides:url_launcher_ios: ^6.3.1

增加以上内容,强制指定url_launcher_ios库的版本。

3. method does not override any method from its superclass

这是关于flutter_inappwebview库的报错(截取部分):

.../flutter_inappwebview_ios-1.0.13/ios/Classes/InAppWebView/InAppWebView.swift:1432:26: error: method does not override any method from its superclasspublic override func evaluateJavaScript(_ javaScriptString: String, completionHandler: ((Any?, Error?) -> Void)? = nil) {^
WebKit.WKWebView:46:26: note: potential overridden instance method 'evaluateJavaScript(_:completionHandler:)' here@MainActor open func evaluateJavaScript(_ javaScriptString: String, completionHandler: (@MainActor @Sendable (Any?, (any Error)?) -> Void)? = nil)^.../flutter_inappwebview_ios-1.0.13/ios/Classes/InAppWebView/InAppWebView.swift:1036:21: error: ambiguous use of 'evaluateJavaScript(_:completionHandler:)'evaluateJavaScript(NOT_ENABLE_VIEWPORT_SCALE_JS_SOURCE)^

这错误看上去和第二个问题很像,没错,又是因为方法增加了@MainActor@Sendable修饰导致的。该问题已经通过增加@MainActor@Sendable修饰的方式修复了,详情请看:

  • Fixed Xcode 16 build failed error: method does not override any method from its superclass

flutter_inappwebview库新版本发布前可以先通过以下方式解决:

dependency_overrides:flutter_inappwebview_ios:git:url: https://github.com/andychucs/flutter_inappwebview.gitref: masterpath: flutter_inappwebview_ios

pubspec.yaml文件中增加以上内容,强制指定flutter_inappwebview_ios库的来源。

最后

如果这篇文章对你有所帮助,点赞👍收藏🌟支持一下吧,谢谢~


本篇文章由@crasowas发布于CSDN。

相关文章:

Flutter问题记录 - 适配Xcode 16和iOS 18

文章目录 前言开发环境问题及解决方案1. Upload Symbols Failed2. type UIApplication does not conform to protocol Launcher3. method does not override any method from its superclass 最后 前言 为了新的镜像功能升级了macOS 15和iOS 18,Xcode也不可避免的需…...

VMware ESXi 7.0U3q macOS Unlocker 集成驱动版更新 OEM BIOS 2.7 支持 Windows Server 2025

VMware ESXi 7.0U3q macOS Unlocker 集成驱动版更新 OEM BIOS 2.7 支持 Windows Server 2025 VMware ESXi 7.0U3q macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版) ESXi 7.0U3 标准版集成 Intel 网卡、Realtek USB 网卡 和 NVMe 驱动 请访问原文链…...

大数相乘,大数相加

大数相乘&#xff1a; #include <iostream> #include <vector> #include <string>std::vector<int> multiply(const std::vector<int>& num1, const std::vector<int>& num2) {int n1 num1.size();int n2 num2.size();std::ve…...

Spring Boot配置文件敏感信息加密

一&#xff0c;背景 Spring Boot应用中的数据库、Redis、Nacos、MQ等的用户名、连接地址、密码在配置文件中一般都是明文存储&#xff0c;如果系统被系统攻破或者配置文件所在的目录读权限被破解&#xff0c;又或者是动态配置文件被窃取&#xff0c;内部人员或者黑客很容易通过…...

Java操作数栈分析

Java 的操作数栈&#xff08;Operand Stack&#xff09;是 JVM 的运行时数据区域之一&#xff0c;位于每个线程的栈帧中。操作数栈用于临时存储操作的中间结果和数据&#xff08;操作数&#xff09;&#xff0c;在方法执行时&#xff0c;JVM 的字节码指令会对操作数栈进行操作。…...

C#|.net core 基础 - 值传递 vs 引用传递

不知道你在开发过程中有没有遇到过这样的困惑&#xff1a;这个变量怎么值被改&#xff1f;这个值怎么没变&#xff1f; 今天就来和大家分享可能导致这个问题的根本原因值传递 vs 引用传递。 在此之前我们先回顾两组基本概念&#xff1a; 值类型** vs 引用类型** **值类型&a…...

axure的下载,激活,汉化全过程,多图

1.前言 下载地址&#xff1a;https://pan.baidu.com/s/12xo1mJer2hmBK7QrYM5v-Q?pwd0107#list/path%2Fcsdn%E5%85%B1%E4%BA%AB%E6%96%87%E4%BB%B6 源文章&#xff1a;https://blog.csdn.net/iwanttostudyc/article/details/123773796?ops_request_misc%257B%2522request%25…...

LCR 026

题目&#xff1a;LCR 026 解法一&#xff1a;线性表 将链表中所有元素加入数组中&#xff0c;创建两个指针&#xff0c;分别指向数组的头部和尾部&#xff0c;然后向中间遍历 public void reorderList(ListNode head) {if (head null || head.next null || head.next.next …...

万能小程序运营管理系统 _requestPost 任意文件读取漏洞复现

0x01 产品简介 万能小程序运营管理系统是一种功能全面的系统,旨在帮助开发者和运营人员更好地管理和推广小程序。该系统集成了多种功能模块,覆盖了从小程序开发、部署到运营管理的全链条服务。系统通过提供丰富的功能和工具,帮助用户轻松搭建、管理和优化小程序。该系统支持…...

libyuv之linux编译

文章目录 一、下载源码二、编译源码三、注意事项1、银河麒麟系统&#xff08;aarch64&#xff09;&#xff08;1&#xff09;解决 armv8-adotprodi8mm 指令集支持问题&#xff08;2&#xff09;解决 armv9-asve2 指令集支持问题 一、下载源码 到GitHub网站下载https://github.…...

vue3路由基本使用

在 Vue 3 中&#xff0c;路由指的是应用程序的导航系统&#xff0c;允许你在不同的视图或页面之间进行切换。通过 vue-router 插件&#xff0c;你可以定义路由规则&#xff0c;将 URL 路径映射到 Vue 组件&#xff0c;实现页面间的跳转和状态管理。使用路由&#xff0c;用户可以…...

哪些人适合学习人工智能?

人工智能&#xff08;AI&#xff09;的浪潮正席卷全球&#xff0c;它不仅是科技领域的一场革命&#xff0c;更是社会进步的重要推手。随着AI技术的不断成熟和应用领域的不断拓展&#xff0c;越来越多的人开始关注并渴望掌握这一前沿技术。那么&#xff0c;究竟哪些人适合学习人…...

计算机的错误计算(九十七)

摘要 讨论 的计算精度问题。 由计算机的错误计算&#xff08;九十六&#xff09;知&#xff0c;IEEE754-2019标准中含有 运算。 另外&#xff0c;似乎没有语言直接编程实现内置了该运算。 例1. 已知 x-0.9999999999076 . 计算 不妨用 Python的 math库与 numpy库中的 …...

Flask-Migrate的使用

组织一个 Flask 项目通常需要遵循一定的结构&#xff0c;以便代码清晰、可维护。下面是一个典型的 Flask 项目结构&#xff1a; my_flask_app/ │ ├── app/ │ ├── __init__.py │ ├── models.py │ ├── views.py │ ├── forms.py │ ├── templat…...

python怎么输入整数

使用input()函数输入一个整数&#xff1a; ainput&#xff08;“请输入一个整数\n”&#xff09; 结果却报错TypeError: str object cannot be interpreted as an integer 查阅文档发现input()函数返回值是str型。 我们只需要这样转换&#xff1a; aint(input("请输入一…...

代码随想录打卡Day36

今天做的头皮发麻&#xff0c;除了第一道题是自己AC的&#xff0c;剩下两道题目都是看视频才AC的&#xff0c;主要是看了视频也花了很久时间才想清楚。 1049. 最后一块石头的重量 II 这道题一开始没什么思路&#xff0c;但是看到提示说和昨天的分割子集很像&#xff0c;然后我…...

速盾:凡科建站开cdn了吗?

凡科建站是一家专业的建站平台&#xff0c;提供了多种功能和工具来帮助用户快速搭建自己的网站。随着互联网技术的不断发展&#xff0c;网站的访问速度和稳定性成为了越来越重要的考虑因素。为了优化用户体验&#xff0c;提高网站的加载速度&#xff0c;凡科建站已经开启了CDN&…...

python贪吃蛇游戏项目源码【免费】

使用Pygame库实现的贪吃蛇游戏。Pygame是一个用于创建视频游戏的Python模块集合&#xff0c;它提供了图形和声音库&#xff0c;使游戏开发变得容易。 初始化设置 屏幕大小 (SCREEN_WIDTH, SCREEN_HEIGHT): 定义了游戏窗口的宽度和高度。方格大小 (SIZE): 定义了游戏中每个小方…...

Mycat搭建分库分表

分库分表解决的问题 单表数据量过大带来的性能和存储容量的限制的问题&#xff1a; 索引效率下降读写瓶颈存储容量限制事务性能问题分库分表架构 再搭建一对主从复制节点&#xff0c;3307主节点&#xff0c;3309从节点配置数据源 dw1 , dr1,创建集群c1创建逻辑库 CREATE DATAB…...

Python中的数据结构

1.列表 可以将列表理解为一个购物清单&#xff0c;这个清单里面的的每个元素可以是任何类型&#xff0c;并且可以重复&#xff08;这里区别了列表与数组&#xff09;。列表用“[]”表示。 #这里定义了一个列表&#xff0c;列表中的元素的类型不同。 lsit_a [a, b, c, 1, 2] …...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知&#xff0c;帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量&#xff0c;能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度&#xff0c;还为机器人、医疗设备和制造业的智…...