Flutter版本升级后iOS应用构建失败求助
问题:升级Flutter后iOS应用无法构建
我是Flutter iOS开发新手,升级Flutter版本后应用无法构建iOS包,此前运行正常。以下是报错信息:
Xcode构建完成,耗时10.7s 构建iOS应用失败 Xcode构建错误输出: ↳ ** BUILD FAILED ** Xcode输出: ↳ === 构建Pods项目的map_view目标(Debug配置)=== /Users/harshavardhan/Workspace/fleetconnect_flutter/ios/Pods/FMDB/src/fmdb/FMDatabase.m:1486:15: 警告:'sqlite3_wal_checkpoint_v2'仅在iOS 5.0或更高版本可用 [-Wunguarded-availability] int err = sqlite3_wal_checkpoint_v2(_db, dbName, checkpointMode, logFrameCount, checkpointCount); ^~~~~~~~~~~~~~~~~~~~~~~~~ 在从/Users/harshavardhan/Workspace/fleetconnect_flutter/ios/Pods/FMDB/src/fmdb/FMDatabase.m:8导入的'SQLite3'模块中: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk/usr/include/sqlite3.h:8244:16: 注释:'sqlite3_wal_checkpoint_v2'已被明确标记为部分可用 SQLITE_API int sqlite3_wal_checkpoint_v2( ^ /Users/harshavardhan/Workspace/fleetconnect_flutter/ios/Pods/FMDB/src/fmdb/FMDatabase.m:1486:15: 注释:将'sqlite3_wal_checkpoint_v2'包裹在@available检查中以消除警告 int err = sqlite3_wal_checkpoint_v2(_db, dbName, checkpointMode, logFrameCount, checkpointCount); ^~~~~~~~~~~~~~~~~~~~~~~~~ 生成1条警告。 === 构建Pods项目的map_view目标(Debug配置)=== /Users/harshavardhan/Workspace/fleetconnect_flutter/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m:101:9: 警告:'dispatch_queue_set_specific'仅在iOS 5.0或更高版本可用 [-Wunguarded-availability] dispatch_queue_set_specific(_queue, kDispatchQueueSpecificKey, (__bridge void *)self, NULL); ^~~~~~~~~~~~~~~~~~~~~~~~~~~ 在从/Users/harshavardhan/Workspace/fleetconnect_flutter/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.h:9导入的'Foundation'模块中: 在从/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:6导入的'CoreFoundation'模块中: 在从/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h:20导入的'Dispatch'模块中: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk/usr/include/dispatch/queue.h:1352:1: 注释:'dispatch_queue_set_specific'已被明确标记为部分可用 dispatch_queue_set_specific(dispatch_queue_t queue, const void *key, ^ /Users/harshavardhan/Workspace/fleetconnect_flutter/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m:101:9: 注释:将'dispatch_queue_set_specific'包裹在@available检查中以消除警告 dispatch_queue_set_specific(_queue, kDispatchQueueSpecificKey, (__bridge void *)self, NULL); ^~~~~~~~~~~~~~~~~~~~~~~~~~~ /Users/harshavardhan/Workspace/fleetconnect_flutter/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m:184:54: 警告:'dispatch_get_specific'仅在iOS 5.0或更高版本可用 [-Wunguarded-availability] FMDatabaseQueue *currentSyncQueue = (__bridge id)dispatch_get_specific(kDispatchQueueSpecificKey); ^~~~~~~~~~~~~~~~~~~~~ 在从/Users/harshavardhan/Workspace/fleetconnect_flutter/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.h:9导入的'Foundation'模块中: 在从/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:6导入的'CoreFoundation'模块中: 在从/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h:20导入的'Dispatch'模块中: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk/usr/include/dispatch/queue.h:1408:1: 注释:'dispatch_get_specific'已被明确标记为部分可用 dispatch_get_specific(const void *key); ^ /Users/harshavardhan/Workspace/fleetconnect_flutter/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m:184:54: 注释:将'dispatch_get_specific'包裹在@available检查中以消除警告 FMDatabaseQueue *currentSyncQueue = (__bridge id)dispatch_get_specific(kDispatchQueueSpecificKey); ^~~~~~~~~~~~~~~~~~~~~ 生成2条警告。 /Users/harshavardhan/development/flutter/.pub-cache/hosted/pub.dartlang.org/fluttertoast-2.2.11/ios/Classes/FluttertoastPlugin.m:19:23: 警告:未使用变量'viewController' [-Wunused-variable] UIViewController *viewController = ^ /Users/harshavardhan/development/flutter/.pub-cache/hosted/pub.dartlang.org/fluttertoast-2.2.11/ios/Classes/FluttertoastPlugin.m:48:19: 警告:未使用变量'size' [-Wunused-variable] NSNumber *size = call.arguments[@"size"]; ^ 生成2条警告。 === 构建Runner项目的Runner目标(Debug配置)=== ld: 未找到Flutter框架 clang: error: 链接命令失败,退出代码1(使用-v查看调用详情) 无法为模拟器构建应用。 在iPhone XR上启动应用失败。 已退出(sigterm)
解决办法
先别急着重装Flutter!从报错里能看出来,前面一堆警告都是第三方库(FMDB、fluttertoast)的版本兼容提示,这些警告不会导致构建失败,真正的核心问题是ld: 未找到Flutter框架,咱们先针对这个问题来解决:
第一步先试试清理iOS依赖缓存,重新安装:
- 打开终端,进入项目的ios目录:
cd ios - 删除Podfile.lock文件:
rm Podfile.lock - 删除整个Pods文件夹:
rm -rf Pods - 重新安装pod依赖:
pod install - 回到项目根目录,清理Flutter缓存:
flutter clean,之后再尝试构建:flutter run
- 打开终端,进入项目的ios目录:
如果上面的步骤没用,检查Xcode里的框架引用路径:
打开Xcode,选中Runner项目,进入Build Settings,搜索Framework Search Paths,确保里面包含$(inherited)和$(FLUTTER_FRAMEWORK_DIR)这两个路径,如果没有就手动添加进去。要是还是不行,试试强制同步Flutter版本:
在终端执行flutter upgrade --force,完成后再重复一遍flutter clean和pod install的步骤。最后说下那些警告,虽然不影响构建,但看着闹心的话可以处理下:
- 升级依赖包:在项目的pubspec.yaml里把fluttertoast升级到最新版本;FMDB是map_view依赖的,也可以尝试升级map_view的版本;
- 或者在Xcode里针对这些警告设置忽略,但更推荐升级依赖来彻底解决。
内容的提问来源于stack exchange,提问作者Harsha Vardhan
相关产品推荐
相关产品推荐

