iOS 上的 Flutter:重新定义模块“Firebase”

Wou*_*Pol 29 xcodebuild ios firebase flutter

我一直在尝试在 iOS 上构建我的 flutter 应用程序,但flutter run抛出以下错误:

/Users/<MyUser>/Desktop/projects/app/ios/Pods/Firebase/CoreOnly/Source
s/module.modulemap:1:8: error: redefinition of module 'Firebase'
module Firebase {
       ^
/Users/<MyUser>/Library/Developer/Xcode/DerivedData/Runner-dbkgurnsasbvieahfnk
dontejqss/SourcePackages/checkouts/firebase-ios-sdk/CoreOnly/Sources/module.
modulemap:1:8: note: previously defined here
module Firebase {
Run Code Online (Sandbox Code Playgroud)

我已按照此处的说明导入了 firebase-ios-sdk 。导入的模块是 FirebaseCore、FirebaseAuth 和 FirebaseMessaging。除了在 AppDelegate.swift 文件中导入 Firebase 之外,我没有对 iOS 特定代码(/ios 下的任何内容)进行任何修改。更新后的文件现在包含以下代码:

import UIKit
import Flutter
import Firebase

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
  _ application: UIApplication,
  didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
 ) -> Bool {
   FirebaseApp.configure()
   GeneratedPluginRegistrant.register(with: self)
   return super.application(application, didFinishLaunchingWithOptions: launchOptions)
 }
}
Run Code Online (Sandbox Code Playgroud)

搜索错误后,我尝试了以下步骤:

  • flutter clean
  • pod deintegratepod install
  • 清理 DerivedData(通过 XCode 和手动)
  • 删除并重新添加 firebase-ios-sdk

但无济于事。

Wou*_*Pol 76

我已经通过完全删除 firebase-ios-sdk 依赖项成功解决了这个问题。看来这是由 Flutter 依赖项导入的,手动添加它会导致重新定义错误。

\n

我建议任何遇到此错误或类似错误的人确保他们遵循的集成步骤适用于 Flutter 而不是 iOS(仅)。

\n

删除依赖项的指南(按照\xce\x9e\xce\xab\xce\x9bL 的建议):\n删除依赖项

\n

  • 谢谢!这为我解决了!对于其他可能正在寻找此内容的人,请在 Xcode → 项目 → 运行器 → 包依赖项中 (16认同)
  • 试试这个指南:![删除依赖项](https://i.imgur.com/th57QAJ.png) (9认同)

Ale*_*dar 35

正如 Wouter Pol 所建议的,如果您遵循许多配置指南并对 Firebase 进行了一些 iOS 特定(非 Flutter)设置,则很可能会发生此错误。

我必须撤消两项更改:

1 - 从 AppDelegate.swift 中删除添加的代码

它应该是这样的——不import Firebase,不FirebaseApp.configure()

appdelegate.swift 用于带有 flutter 的 firebase 推送通知

2 - 无包依赖性

我之前添加了 Firebase 包,但当我已经使用适当的包配置了 Flutter 时,我不需要它。看起来应该是这样Runner > Swift Packages的:

Runner > Swift Packages - Firebase 通知与 flutter 不存在依赖关系