Flutter应用Xcode归档时Firestore废弃API报错求助
解决Flutter归档时cloud_firestore的废弃API错误
问题原因
你使用的cloud_firestore:4.7.1版本未适配Firebase iOS SDK的最新API,其中persistenceEnabled和cacheSizeBytes属性已被废弃,需改用cacheSettings配置缓存相关参数。
解决方案
方案一:升级cloud_firestore版本
- 打开项目根目录下的
pubspec.yaml文件,找到cloud_firestore依赖项,将版本更新至4.10.0及以上(该版本已修复废弃API问题):
dependencies: cloud_firestore: ^4.10.0
- 执行命令更新依赖:
flutter pub get
- 重新在Xcode中尝试归档操作。
方案二:手动修改本地缓存文件(不升级版本时使用)
找到报错的文件:/Users/mg/.pub-cache/hosted/pub.dev/cloud_firestore-4.7.1/ios/Classes/FLTFirebaseFirestoreReader.m,修改其中的FIRFirestoreSettings方法:
替换前代码片段
- (FIRFirestoreSettings *)FIRFirestoreSettings { NSDictionary *values = [self readValue]; FIRFirestoreSettings *settings = [[FIRFirestoreSettings alloc] init]; if (![values[@"persistenceEnabled"] isEqual:[NSNull null]]) { settings.persistenceEnabled = [((NSNumber *)values[@"persistenceEnabled"]) boolValue]; } if (![values[@"host"] isEqual:[NSNull null]]) { settings.host = (NSString *)values[@"host"]; // Only allow changing ssl if host is also specified. if (![values[@"sslEnabled"] isEqual:[NSNull null]]) { settings.sslEnabled = [((NSNumber *)values[@"sslEnabled"]) boolValue]; } } if (![values[@"cacheSizeBytes"] isEqual:[NSNull null]]) { int size = [((NSNumber *)values[@"cacheSizeBytes"]) intValue]; if (size == -1) { settings.cacheSizeBytes = kFIRFirestoreCacheSizeUnlimited; } else { settings.cacheSizeBytes = (int64_t)size; } } settings.dispatchQueue = [FLTFirebaseFirestoreReader getFirestoreQueue]; return settings; }
替换后代码片段
- (FIRFirestoreSettings *)FIRFirestoreSettings { NSDictionary *values = [self readValue]; FIRFirestoreSettings *settings = [[FIRFirestoreSettings alloc] init]; FIRFirestoreCacheSettings *cacheSettings = [[FIRFirestoreCacheSettings alloc] init]; if (![values[@"persistenceEnabled"] isEqual:[NSNull null]]) { cacheSettings.isPersistenceEnabled = [((NSNumber *)values[@"persistenceEnabled"]) boolValue]; } if (![values[@"host"] isEqual:[NSNull null]]) { settings.host = (NSString *)values[@"host"]; // Only allow changing ssl if host is also specified. if (![values[@"sslEnabled"] isEqual:[NSNull null]]) { settings.sslEnabled = [((NSNumber *)values[@"sslEnabled"]) boolValue]; } } if (![values[@"cacheSizeBytes"] isEqual:[NSNull null]]) { int size = [((NSNumber *)values[@"cacheSizeBytes"]) intValue]; if (size == -1) { cacheSettings.sizeBytes = kFIRFirestoreCacheSizeUnlimited; } else { cacheSettings.sizeBytes = (int64_t)size; } } settings.cacheSettings = cacheSettings; settings.dispatchQueue = [FLTFirebaseFirestoreReader getFirestoreQueue]; return settings; }
修改完成后,重新在Xcode中执行归档操作即可。
内容的提问来源于stack exchange,提问作者Mahmoud
相关产品推荐
相关产品推荐

