V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
BaymaxK
V2EX  ›  程序员

处理 Flutter 在 Xcode16 环境无法构建问题

  •  
  •   BaymaxK · 17 天前 · 1083 次点击

    DALL·E 2024-09-30 15.23.54 - A minimalist cover image for an article titled 'Flutter in Xcode 16_ Fixing Compatibility Issues.' The background is a plain, clean light gray. In the

    前言

    随着 Xcode16 正式版的发布,前几天顺手就给它升级了。昨天启动我的 flutter 项目时,发现无法启动了,在构建阶段就报错了。

    经过一番折腾后,终于找到了问题所在,本文就跟大家分享下这次升级所遇到的报错,以及我的解决方案,欢迎各位感兴趣的开发者阅读本文。

    问题复述

    同往常一样,我打开Android Studio,启动项目,一气呵成。正准备愉快的coding,经过 40 秒的等待,我眼前一黑,怎么构建失败了,出现了如下所示的报错

    • DVTDeviceOperation: Encountered a build number "" that is incompatible with DVTBuildVersion.
    • [MT] DVTDeviceOperation: Encountered a build number "" that is incompatible with DVTBuildVersion.

    image-20240930104407036

    尝试解决

    一般情况下,遇到这种环境问题,我的解决思路为:

    • 求助群聊、好友、AI
    • 求助搜索引擎
    • 三板斧:重启、重装、基建升级

    我的环境变量信息为:

    • macOS 14.7
    • Xcode 16
    • Flutter 3.22.0 、Dart 3.4.0

    清理构建缓存

    第一个思路总结下来就是让我清理掉构建缓存,重新安装CocoaPods,升级url_launcher_ios,清理 Xcode 的 Derived Data ,清理模拟器缓存,我就照着操作了。

    # 清理构建缓存
    flutter clean
    # 重新安装 CocoaPods
    cd ios
    pod deintegrate
    pod install
    # 升级 url_launcher_ios ,将项目跟目录下的 pubspec.yaml 文件中的版本号改为最新
    
    # 清理 Derived Data
    rm -rf ~/Library/Developer/Xcode/DerivedData
    
    # 清理模拟器缓存
    xcrun simctl shutdown all
    xcrun simctl erase all
    

    操作完之后,我发现问题依旧存在,而且因为升级url_launcher_ios还导致了不兼容报错🥲。

    相同的错误

    在谷歌检索报错信息的时候,我搜到了一篇stackoverflow 的帖子,他的报错跟我的一模一样。

    image-20240930115641674

    但是,他是原生开发环境,评论区也没找到解决方案。

    解决方案

    折腾到这里,问题依然没解决,那我就只能重启下电脑了,把 flutter 和 dart 重新安装下了(跟当前版本一致)。依然是同样的报错,那就只能是基建的问题。

    我的项目是基于 flutter_flexible 作为脚手架来搭建的,于是我就去看了下他的提交记录,我发现他针对 Flutter 的新版本做了兼容处理。

    image-20240930121432751

    一般情况下,脚手架对某个版本做兼容,再碰上某个端的大版本升级,肯定会对当前端做一些兼容处理的。那么,我升级 flutter 版本,问题应该就解决了。

    升级 flutter 版本

    我的 flutter 是通过 brew 安装的,所以我升级的时候,通过 brew 的upgrade命令升级即可。

    brew upgrade flutter
    

    升级后,我们通过flutter --version来看下版本信息。

    • flutter 3.24.3
    • dart 3.5.3

    image-20240930135851822

    版本升级后,再次打开 android studio ,我们会发现 flutter 和 dart 的路径找不到了,需要重新配置下。

    image-20240930140143647

    image-20240930140204759

    再次启动项目后,我们发现它换了新的报错。看这个报错,应该是某些依赖包不支持 ios18 导致的。

    Swift Compiler Error(Xcode): Type 'UIApplication' does not conform to protocol 'Launcher'
    

    image-20240930140427844

    升级依赖包

    我的项目是用flutter_flexible做的脚手架,那么我只需要拉一份最新的模版代码下来,跟我现在的项目依赖做下对比,将不同之处更改即可。

    # 更新下载模版
    flib updata
    # 创建项目
    flib create
    

    经过对比后,我对 pubspec.yaml 文件中的依赖包做了更改,如下所示:

    environment:
    -  sdk: ">=2.12.0 <4.0.0"
    + sdk: ">=2.17.6 <4.0.0"
    dependencies:
    -  dio: 5.4.1
    + dio: 5.7.0
    -  flutter_screenutil: 5.9.0
    + flutter_screenutil: 5.9.3
    -  shared_preferences: 2.2.0
    + shared_preferences: 2.3.2
    -  synchronized: 3.1.0
    + synchronized: 3.2.0
    -  package_info_plus: 4.1.0 
    -  url_launcher: 6.1.12
    -  permission_handler: 11.3.0
    -  fluttertoast: 8.2.4
    -  tdesign_flutter: 0.1.4 
    +  package_info_plus: 8.0.2
    +  url_launcher: 6.3.0
    +  permission_handler: 11.3.1
    +  fluttertoast: 8.2.8
    +  device_info_plus: 10.1.2
    +  tdesign_flutter: 0.1.6
    dev_dependencies:
    -  flutter_lints: ^2.0.1
    + flutter_lints: ^4.0.0
    

    最后,我们执行flutter pub get更新依赖包。

    问题解决

    依赖包更新完成后,我们再次启动项目,发现已经可以正常启动了。

    image-20240930143315374

    写在最后

    至此,文章就分享完毕了。

    我是神奇的程序员,一位前端开发工程师。

    如果你对我感兴趣,请移步我的个人网站,进一步了解。

    • 文中如有错误,欢迎在评论区指正,如果这篇文章帮到了你,欢迎点赞和关注😊
    • 本文首发于神奇的程序员公众号,未经许可禁止转载💌
    3 条回复    2024-10-01 07:24:06 +08:00
    magic3584
        1
    magic3584  
       17 天前
    我的方法简单粗暴:
    重新下载了 Xcode 15
    BaymaxK
        2
    BaymaxK  
    OP
       17 天前
    @magic3584 还得是你🤣
    Amose2024
        3
    Amose2024  
       17 天前
    你的 blog 黑色背景加上灰色字,对比度不够,看起来好累
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5539 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 06:25 · PVG 14:25 · LAX 23:25 · JFK 02:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.