聊聊 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
英文地址,請注明出處:http://en.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;在你那里卻不…