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

BaymaxK · 2024-9-30 15:26:02 · 87 次点击
![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]( https://resource.kaisir.cn/uploads/MarkDownImg/20240930/mTKTQv.webp)

## 前言

随着 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]( https://resource.kaisir.cn/uploads/MarkDownImg/20240930/8DIard.png)



## 尝试解决

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

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

我的环境变量信息为:

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



### 清理构建缓存

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

```bash
# 清理构建缓存
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 的帖子]( https://stackoverflow.com/questions/78850571/dvtdeviceoperation-encountered-a-build-number-that-is-incompatible-with-dvtbuil),他的报错跟我的一模一样。

![image-20240930115641674]( https://resource.kaisir.cn/uploads/MarkDownImg/20240930/BQmSd0.png)

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



## 解决方案

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

我的项目是基于 **[flutter_flexible]( https://github.com/tec8297729/flutter_flexible)** 作为脚手架来搭建的,于是我就去看了下他的提交记录,我发现他针对 Flutter 的新版本做了兼容处理。



![image-20240930121432751]( https://resource.kaisir.cn/uploads/MarkDownImg/20240930/Y3ADjq.png)

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



### 升级 flutter 版本

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

```bash
brew upgrade flutter
```

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

* flutter `3.24.3`
* dart `3.5.3`

![image-20240930135851822]( https://resource.kaisir.cn/uploads/MarkDownImg/20240930/aSR2wc.png)

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

![image-20240930140143647]( https://resource.kaisir.cn/uploads/MarkDownImg/20240930/g4jnVH.png)

![image-20240930140204759]( https://resource.kaisir.cn/uploads/MarkDownImg/20240930/plitMg.png)

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

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

![image-20240930140427844]( https://resource.kaisir.cn/uploads/MarkDownImg/20240930/z82NLM.png)



### 升级依赖包

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

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

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

```diff
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]( https://resource.kaisir.cn/uploads/MarkDownImg/20240930/BceNU0.png)



## 写在最后

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

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

如果你对我感兴趣,请移步我的[个人网站]( https://www.kaisir.cn/),进一步了解。

* 文中如有错误,欢迎在评论区指正,如果这篇文章帮到了你,欢迎点赞和关注😊
* 本文首发于[神奇的程序员]( https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8b7566ab57814aad861b378882c1ee58~tplv-k3u1fbpfcp-watermark.image?)公众号,未经许可禁止转载💌
举报· 87 次点击
登录 注册 站外分享
1 条回复  
magic3584 小成 2024-9-30 16:44:10
我的方法简单粗暴:
重新下载了 Xcode 15
返回顶部