聊聊 Flutter 在 iOS 真机 Debug 运行出现 Timed out *** to update 的问题

最近刚好有人在问,他的 Flutter 项目在升级之后出现 Error starting debug session in Xcode: Timed out waiting for CONFIGURATION_BUILD_DIR to update 问题,也就是真机 Debug 时始终运行不了的问题:

其实这已经是一个老问题了,这个问题不只是 Flutter 会出现,在 React Native 平台也会有,因为本质上 Xcode 15+ 的升级带来的变动,最明显标志就是,如果你直接在 Xcode 直接运行这个 Flutter 项目是可以正常运行的话,那么 99% 就是因为 Xcode 15+ 上 ios-deploy 的“废弃”引起的问题

ios-deploy 是一个通过对苹果私有框架进行逆向,提供了无需打开 Xcode.app 就可以在物理 iOS 设备上安装和调试应用的第三方框架,而对于 Flutter 而言, flutter run 命令的一键式启动,在很大程度上依赖 ios-deploy ,以及至关重要的一步:在设备上启动 debugserver 进程。

当然,虽然 ios-deploy 不能用了,但是苹果提供了官方的替代方案:devicectl 命令行工具,不过虽然它能够安装应用(例如 devicectl device install app ),但它缺少了在设备上启动 debugserver 并将附加到目标进程的支持,这对于 Flutter Debug 时的 JIT 和 hotload 非常重要。

详细原因可见:《Flutter 又双叒叕可以在 iOS 26 的真机上 hotload》 ,而针对 devicectl 可以从下方的 React Native CLI 变动中看到,针对真机按照,现在 React Native 也采用了 devicectl 的方式:image-20250717131819323

所以,虽然有 devicectl ,但是 Flutter 的 JIT 离不开 debugserver 的权限支持,所以 Flutter 官方针对 Xcode 15 的场景进行了一些临时处理,当开发者运行 flutter run 时,流程会是:

  • 使用 xcodebuild 构建应用
  • 启动 Xcode.app
  • 利用脚本让 Xcode 在连接的设备上运行 App
  • 等待 Xcode 建立调试会话,将 Flutter 工具的守护进程连接到 Dart VM 的 Observatory 端口

简单说,就是需要安装 Xcode 并且运行时会弹出 Xcode 窗口,还需要用户在 macOS 的“系统设置 > 隐私与安全性 > 自动化”中给予相应的权限 :

而问题主要也是出现在这里,很多开发者发现,Flutter run 并没有拉起 Xcode ,或者拉起后依然出现超时等情况,这也是这个方案最大的问题:

目前看来,这还和用户当前项目的环境有关系,正常来说这个流程是不会有问题的,但是结果来看并不是大家都“正常”,所以根据已有信息看,遇到这类问题一般的做法有:

  • flutter clean 清除掉已有的可能存在问题的 build
  • 手动启动 Xcode 减少等到时间
  • 通过 Xcode 直接运行判断项目本身兼容存在问题,如果可以运行,说明是 Flutter 命令行问题
  • 关闭 Wi-Fi,有时候即使 iPhone 通过 USB 数据线连接到 Mac,Xcode 也可能优先选择通过 Wi-Fi 进行调试连接
  • 执行 flutter run 命令运行
  • 如果还不行,可以尝试 Xcode 直接运行,然后执行 flutter attatch 尝试连接 Dart VM Observatory 服务
  • 再不行,只能模拟器开发,然后 release 运行真机测试

而针对这个问题,其实苹果也发现了,所以 Xcode 16 增加了 devicectl 和 Xcode 的命令行调试器 lldb 协同工作的支持,虽然 devicectl 单独无法启动 debugserver,但它可以和 Xcode 的命令行调试器 lldb 协同工作

所以针对这个问题,Flutter 计划也是有在 Xcode 16 做新的调整的计划,通过新的 devicectl + lldb 集成到 flutter run 命令来回归已有的流程,但是因为涉及变动很多,暂时看起来还没什么进展:

主要是 Xcode automation in CI 也不是完全不能用····

最后总结下,这个问题的核心就是,你用 Xcode 能不能运行,如果可以,就可以尝试使用 flutter attatch ,或者 flutter run 之前先打开 Xcode ,并且确保 Xcode 开启了自动签名之类的必备条件,最好关闭手机 Wi-Fi 来排除问题。

最极端的情况下,可能会需要你 flutter cleanrm -r ~/Library/Developer/Xcode/iOS\ DeviceSupport 清除设备当前授权。

参考链接

https://github.com/flutter/flutter/issues/172095

https://github.com/flutter/flutter/issues/133465

https://github.com/flutter/flutter/issues/144218

https://github.com/flutter/flutter/issues/42969#issuecomment-3057078316

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

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

相关文章

《R for Data Science (2e)》免费中文翻译 (第1章) --- Data visualization(2)

写在前面 本系列推文为《R for Data Science (2)》的中文翻译版本。所有内容都通过开源免费的方式上传至Github,欢迎大家参与贡献,详细信息见: Books-zh-cn 项目介绍: Books-zh-cn:开源免费的中文书籍社区 r4ds-zh-cn …

【机器学习【9】】评估算法:数据集划分与算法泛化能力评估

文章目录一、 数据集划分:训练集与评估集二、 K 折交叉验证:提升评估可靠性1. 基本原理1.1. K折交叉验证基本原理1.2. 逻辑回归算法与L22. 基于K折交叉验证L2算法三、弃一交叉验证(Leave-One-Out)1、基本原理2、代码实现四、Shuff…

CodeBuddy三大利器:Craft智能体、MCP协议和DeepSeek V3,编程效率提升的秘诀:我的CodeBuddy升级体验之旅(个性化推荐微服务系统)

🌟 嗨,我是Lethehong!🌟 🌍 立志在坚不欲说,成功在久不在速🌍 🚀 欢迎关注:👍点赞⬆️留言收藏🚀 🍀欢迎使用:小智初学计…

Spring Boot 整合 Redis 实现发布/订阅(含ACK机制 - 事件驱动方案)

Spring Boot整合Redis实现发布/订阅&#xff08;含ACK机制&#xff09;全流程一、整体架构二、实现步骤步骤1&#xff1a;添加Maven依赖<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter…

Sklearn 机器学习 线性回归

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Sklearn 机器学习线性回归实战详解 线性回归是机器学习中最基础也最经典的算法之一,…

AJAX案例合集

案例一&#xff1a;更换网站背景JS核心代码<script>document.querySelector(.bg-ipt).addEventListener(change, e > {//选择图片上传&#xff0c;设置body背景const fd new FormData()fd.append(img, e.target.files[0])axios({url: http://hmajax.itheima.net/api/…

vscode环境下c++的常用快捷键和插件

本文提供一些能够在vscode的环境下&#xff0c;提高c代码书写效率的快捷键&#xff0c;插件以及设置等等。 快捷键ctrlshiftx&#xff1a; 弹出插件菜单ctrlshiftp&#xff1a;弹出命令面板可以快捷执行一些常见命令插件安装这个后&#xff0c;可以按住ctrl跳转到方法的实现&am…

React + ts 中应用 Web Work 中集成 WebSocket

一、Web Work定义useEffect(() > {let webSocketIndex -1const websocketWorker new Worker(new URL(./websocketWorker.worker.ts?worker, import.meta.url),{type: module // 必须声明模块类型});//初始化WEBSOCKET&#xff08;多个服务器选择最快建立连接…

RabbitMQ面试精讲 Day 3:Exchange类型与路由策略详解

【RabbitMQ面试精讲 Day 3】Exchange类型与路由策略详解 文章标签 RabbitMQ,消息队列,Exchange,路由策略,AMQP,面试题,分布式系统 文章简述 本文是"RabbitMQ面试精讲"系列第3天内容&#xff0c;深入解析RabbitMQ的核心组件——Exchange及其路由策略。文章详细剖析…

深入解析Hadoop MapReduce Shuffle过程:从环形缓冲区溢写到Sort与Merge源码

MapReduce与Shuffle过程概述在大数据处理的经典范式MapReduce中&#xff0c;Shuffle过程如同人体血液循环系统般连接着计算框架的各个组件。作为Hadoop最核心的分布式计算模型&#xff0c;MapReduce通过"分而治之"的思想将海量数据处理分解为Map和Reduce两个阶段&…

Kafka MQ 消费者

Kafka MQ 消费者 1 创建消费者 在读取消息之前,需要先创建一个KafkaConsumer对象。创建KafkaConsumer对象与创建KafkaProducer对象非常相似—把想要传给消费者的属性放在Properties对象里。本章后续部分将深入介绍所有的配置属性。为简单起见,这里只提供3个必要的属性:boo…

人工智能——Opencv图像色彩空间转换、灰度实验、图像二值化处理、仿射变化

一、图像色彩空间转换&#xff08;一&#xff09;颜色加法1、直接相加1、直接相加2、调用cv.add()函数进行饱和操作 在OpenCV中进行颜色的加法&#xff0c;我们说图像即数组&#xff0c;所以从数据类型来说我们可以直接用numpy的知识来进行直接相加&#xff0c;但是存在…

【JToken】JToken == null 判断无效的问题

if (innerNode null) {continue; }Debug.Log($"toNode type: {node["toNode"]?.GetType()}");发现这个JToken 无法正确的判断 是否为 null&#xff0c;再排除逻辑问题后&#xff0c;我基本能确定的是 这个对象 不返回的不是真正的C# NULL 输出类型后是 N…

C++基于libmodbus库实现modbus TCP/RTU通信

今天看到了一个参考项目中用到了modbus库&#xff0c;看着使用很是方便&#xff0c;于是记录一下。后面有时间了或者用到了再详细整理。 参考&#xff1a;基于libmodbus库实现modbus TCP/RTU通信-CSDN博客 一、介绍 1.1库文件包含 1.2最简单的使用 本人在QT6.5下&#xff0…

【原创】微信小程序添加TDesign组件

前言 TDesign 是腾讯公司推出的一款UI界面库,至于腾讯的实力嘛,也不用多说了。 官网:https://tdesign.tencent.com/ 源码:https://github.com/Tencent/tdesign 目前处于活跃状态,发文前5日,该库仍在更新中… 遇到的问题 虽然腾讯为微信小程序开发提供了一个讨论的论坛,…

Vue的路由模式的区别和原理

路由模式 Vue 的路由模式指的是 Vue Router 提供的 URL 处理方式&#xff0c;主要有两种&#xff1a;Hash 模式和History 模式。 Hash模式 在 Vue Router 中&#xff0c;默认使用的是 hash 模式&#xff0c;即 mode: hash。如果想要使用 history 模式&#xff0c;可以设置 mode…

通过TPLink路由器进行用户行为审计实战

用户行为审计是指对用户在网络平台上的行为进行监控和记录&#xff0c;以便对其行为进行分析和评估的过程。随着互联网的普及和发展&#xff0c;用户行为审计在网络安全和数据隐私保护方面起到了重要的作用。 用户行为审计可以帮助发现和预防网络安全威助。通过对用户的行为进行…

MYSQL 第一次作业

新建产品库mysql> CREATE DATABASE mydb6_product;使用产品库mysql> USE mydb6_product;创建employess表mysql> CREATE TABLE employees (-> id INT PRIMARY KEY,-> name VARCHAR(50) NOT NULL,-> age INT,-> gender VARCHAR(10) NOT NULL DEFAULT unknow…

暑期前端训练day7——有关vue-diff算法的思考

前言 今天分享一下我对vue的diff的探究&#xff0c;跟我一起深入底层&#xff0c;看一看vue是怎么进行diff的&#xff0c;它的复杂度如何&#xff0c;为什么性能这么高&#xff0c;diff的目标是尽可能的复用原来的真实dom&#xff0c;减少删除真实dom和创建真实的dom的开销&…

【Docker】Docker的初步认识以及Ubuntu下的Docker环境安装、配置

前言 在当今快速迭代的软件开发与部署领域&#xff0c;容器化技术已成为不可或缺的核心力量&#xff0c;而 Docker 作为容器化技术的杰出代表&#xff0c;正以其轻量、高效、可移植的特性深刻改变着开发与运维的模式。它有效解决了 “在我机器上能运行&#xff0c;在你那里却不…