You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter应用Xcode归档时Firestore废弃API报错求助

解决Flutter归档时cloud_firestore的废弃API错误

问题原因

你使用的cloud_firestore:4.7.1版本未适配Firebase iOS SDK的最新API,其中persistenceEnabled和cacheSizeBytes属性已被废弃,需改用cacheSettings配置缓存相关参数。

解决方案

方案一:升级cloud_firestore版本

  1. 打开项目根目录下的pubspec.yaml文件,找到cloud_firestore依赖项,将版本更新至4.10.0及以上(该版本已修复废弃API问题):
dependencies:
  cloud_firestore: ^4.10.0
  1. 执行命令更新依赖:
flutter pub get
  1. 重新在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 15:49:51