Flutter使用VS Code构建iOS包报UIImage相关ARC语义错误如何修复
问题根因
imageByPreparingForDisplay和imageByPreparingThumbnailOfSize:是苹果UIKit框架在iOS 15.0版本新增的UIImage实例方法,出现这两个ARC语义报错的核心原因是当前编译环境无法识别这两个方法声明,常见触发场景包括:
- Xcode版本过低,内置iOS SDK版本低于15.0,没有包含上述两个方法的接口声明
- 项目依赖的Flutter插件存在兼容缺陷:调用上述API时未做系统版本判断,且插件声明的最低iOS兼容版本低于15.0
- Flutter依赖缓存损坏,拉取的插件原生代码存在版本错乱
修复方案(按操作优先级排序)
方案1:升级Xcode(优先选择)
将Xcode升级到13.0及以上版本(Xcode 13开始默认搭载iOS 15 SDK),升级完成后在项目根目录执行以下命令清理缓存、重新拉取依赖:
flutter clean flutter pub get cd ios pod install --repo-update
命令执行完成后回到VS Code重新触发iOS构建即可。
方案2:调整项目最低iOS部署版本
如果你的应用不需要兼容iOS 15以下的系统版本,可以直接调高项目最低部署目标:
- 用Xcode打开iOS目录下的
Runner.xcworkspace文件 - 选中左侧导航栏的Runner项目,打开General标签页
- 在Deployment Info板块将iOS部署目标修改为15.0
- 打开iOS目录下的
Podfile文件,将首行的平台声明修改为platform :ios, '15.0' - 回到项目根目录重新执行缓存清理、依赖安装命令后再构建。
方案3:为报错插件添加低版本兼容逻辑
如果需要兼容iOS 15以下系统,先通过Xcode的报错日志定位触发问题的插件:报错信息会显示出错代码的文件路径,路径中会包含对应插件的名称。
定位到插件后可以直接将插件升级到最新官方版本,多数主流图片类插件已经在新版本修复了该兼容问题;如果插件未更新,可以手动修改报错位置的原生代码,为新API调用添加系统版本判定,示例代码如下:
UIImage *displayImage = originalImage; if (@available(iOS 15.0, *)) { // iOS 15及以上系统调用新API displayImage = [originalImage imageByPreparingForDisplay]; // 缩略图方法添加同样的版本判定即可 // displayImage = [originalImage imageByPreparingThumbnailOfSize:CGSizeMake(200, 200)]; } else { // iOS 15以下系统走原有兼容逻辑,自行实现图像解码、尺寸缩放即可 }
方案4:修复损坏的依赖缓存
如果以上操作都无法解决问题,执行以下命令清理全局Flutter缓存、重新安装iOS依赖:
flutter pub cache repair cd ios rm -rf Pods Podfile.lock pod install --repo-update
内容的提问来源于stack exchange,提问作者arun
相关产品推荐
相关产品推荐

