为什么我的 Flutter 应用程序在 iOS 启动时崩溃?
Why does my Flutter app crash at startup on iOS?
我正在尝试使用 Flutter 为 iOS 和 Android 构建一个简单的应用程序,但是当我尝试在 [=25] 上 运行 它时应用程序在启动时崩溃=](Android 运行 很好)。我没有 mac,所以我使用 Codemagic 编译发布版本并部署到 TestFlight,然后从那里安装到 iPhone。据我所知,Apple 仅在 Xcode 中显示其崩溃日志(App Store Connect online 中没有任何内容?),并且由于我没有 mac,所以我看不到这些。关于我可能 运行 的想法,或者我可以收集哪些信息来调试问题?
谢谢!
编辑:我一直在深入研究,看起来崩溃与 Firebase 依赖项有关。如果我创建 Flutter 演示项目 (flutter create),它 运行 在 iOS 上没问题。但是,如果我随后将 Firebase 包添加到 pubspec.yaml,并手动添加 GoogleServices-info.plist,应用程序会在启动时崩溃。 (我还没有添加任何使用 Firebase 的代码。)GoogleServices-info.plist 应该添加 Xcode,但因为我没有 Xcode 或 mac,这很难。这个问题的第二个回答给出了一个建议:Where to save GoogleService-Info.plist in Flutter without Xcode?
我尝试进行这些更改但得到了相同的结果。有人对在没有 mac 的情况下添加 Firebase 有任何建议吗?
很可能您遇到了下一个 Flutter 问题https://github.com/flutter/flutter/issues/54707
我遇到了同样的问题,我已经修复了它,因为我是 ios 部署的新手 我忘记添加功能,这确实让我的应用程序在 testflight 中崩溃了......所以请确保你已经添加了所需的功能在 xcode
的签名和功能选项卡中
好的,事情是这样的。最初应用程序在 iOS 崩溃,因为 GoogleServices-info.plist 文件存在问题(可能)。没有错误消息,所以我不知道去哪里找。我终于回到了简单的演示应用程序并开始分层以隔离问题。演示应用程序将在 iOS 上构建并 运行 没有问题,但是当我添加 Firebase 依赖项(作为一个组)时,它失败了。我已经手动添加了 GoogleServices-info.plist 文件(在 Xcode 之外)并使用文本编辑器调整了 ios/Runner.xcodeproj/project.pbxproj 中的引用,但这并没有做这个把戏。
此时我终于崩溃了,得到了一本Mac书。在 Mac 上调试,我现在可以看到该应用程序在模拟器上的调试模式下以及在设备上的发布模式下崩溃,但仍然没有有用的错误消息。我使用 Xcode 添加了 GoogleServices-info.plist 文件,所以至少那部分是正确的,但应用程序仍然立即崩溃。通过文档,我意识到当我制作示例应用程序时,我忘记在 AdMob 的 info.plist 文件中添加应用程序 ID。此时,只是 AdMob 导致了崩溃,而不是其他 Firebase 依赖项。我把它加回去,事情 运行 很好。我希望我一个月前看过那个。呃.
感谢@Mikhail Tokharev 和@season 对这样一个模糊的问题提出质疑。我希望一开始能分享更多细节,但我还不够了解可能出了什么问题。
TL;DR
- 就拿一个Mac。尝试通过 Codemagic 进行调试是行不通的。
- 对于 Firebase,请确保您确实通过 Xcode 添加了 GoogleServices-info.plist 文件。尝试手动添加它并破解 project.pbxproj 文件可能行不通(这是一个实用的建议,我没有最终证明这一点)。
https://firebase.google.com/docs/flutter/setup?platform=ios#add-config-file
- 对于 AdMob,请务必将您的应用程序 ID 添加到 info.plist。 https://pub.dev/packages/firebase_admob
我最近几天一直面临这个错误,今天碰巧解决了。因此,我想与将 iOS 应用程序连接到 firebase 后遇到启动错误的任何人分享它。
我在使用 firebase 设置新的 iOS 应用程序时遵循了所有步骤,这正是导致错误的原因,就我而言。如果您在 AppDelegate.swift
中放置了 import 'Firebase' 和 Firebase.configure()
,请将其删除并再次 运行 您的应用程序。我删除了这两行并且它工作正常。使用 Cloud Firestore 对其进行测试(只需让一个按钮向您的 Cloud Firestore 写入内容)并确保在按下按钮时也添加 await Firebase.initializeApp();
。
我完成了所有这些步骤并且对我来说效果很好。
P.S。我在 Mac 的 android 工作室完成了它。
对于像我这样的新手,请确保在 ios/Runner/AppDelegate.swift
文件中的 GeneratedPluginRegistrant
之前注册 firebase。
// This works without crashes, FirebaseApp.configure() after GeneratedPluginRegistrant crashes
FirebaseApp.configure()
GeneratedPluginRegistrant.register(with: self)
我遇到了同样的问题,解决方法如下:
在flutter sdk的文件夹下,
我做了 git 拉然后 运行 再次应用程序并解决了。
如果你在 flutter 应用中使用 Google Firebase 库
确保在 AppDelegate.swift
文件中的 GeneratedPluginRegistrant.register(with: self)
之前使用 FirebaseApp.configure()
。
FirebaseApp.configure()
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
使用终端运行 应用程序。
运行 这个命令
flutter run --release
对于 iOS:在我们的例子中,这是因为 Facebook 插件更新。
以前的版本:flutter_facebook_auth: ^3.5.1
新版本:flutter_facebook_auth: ^4.3.3
Info.plist 文件中缺少 FacebookClientToken
。所以在添加之后它起作用了。
<key>FacebookClientToken</key>
<string>$(FACEBOOK_CLIENT_TOKEN)</string>
我正在尝试使用 Flutter 为 iOS 和 Android 构建一个简单的应用程序,但是当我尝试在 [=25] 上 运行 它时应用程序在启动时崩溃=](Android 运行 很好)。我没有 mac,所以我使用 Codemagic 编译发布版本并部署到 TestFlight,然后从那里安装到 iPhone。据我所知,Apple 仅在 Xcode 中显示其崩溃日志(App Store Connect online 中没有任何内容?),并且由于我没有 mac,所以我看不到这些。关于我可能 运行 的想法,或者我可以收集哪些信息来调试问题?
谢谢!
编辑:我一直在深入研究,看起来崩溃与 Firebase 依赖项有关。如果我创建 Flutter 演示项目 (flutter create),它 运行 在 iOS 上没问题。但是,如果我随后将 Firebase 包添加到 pubspec.yaml,并手动添加 GoogleServices-info.plist,应用程序会在启动时崩溃。 (我还没有添加任何使用 Firebase 的代码。)GoogleServices-info.plist 应该添加 Xcode,但因为我没有 Xcode 或 mac,这很难。这个问题的第二个回答给出了一个建议:Where to save GoogleService-Info.plist in Flutter without Xcode? 我尝试进行这些更改但得到了相同的结果。有人对在没有 mac 的情况下添加 Firebase 有任何建议吗?
很可能您遇到了下一个 Flutter 问题https://github.com/flutter/flutter/issues/54707
我遇到了同样的问题,我已经修复了它,因为我是 ios 部署的新手 我忘记添加功能,这确实让我的应用程序在 testflight 中崩溃了......所以请确保你已经添加了所需的功能在 xcode
的签名和功能选项卡中好的,事情是这样的。最初应用程序在 iOS 崩溃,因为 GoogleServices-info.plist 文件存在问题(可能)。没有错误消息,所以我不知道去哪里找。我终于回到了简单的演示应用程序并开始分层以隔离问题。演示应用程序将在 iOS 上构建并 运行 没有问题,但是当我添加 Firebase 依赖项(作为一个组)时,它失败了。我已经手动添加了 GoogleServices-info.plist 文件(在 Xcode 之外)并使用文本编辑器调整了 ios/Runner.xcodeproj/project.pbxproj 中的引用,但这并没有做这个把戏。
此时我终于崩溃了,得到了一本Mac书。在 Mac 上调试,我现在可以看到该应用程序在模拟器上的调试模式下以及在设备上的发布模式下崩溃,但仍然没有有用的错误消息。我使用 Xcode 添加了 GoogleServices-info.plist 文件,所以至少那部分是正确的,但应用程序仍然立即崩溃。通过文档,我意识到当我制作示例应用程序时,我忘记在 AdMob 的 info.plist 文件中添加应用程序 ID。此时,只是 AdMob 导致了崩溃,而不是其他 Firebase 依赖项。我把它加回去,事情 运行 很好。我希望我一个月前看过那个。呃.
感谢@Mikhail Tokharev 和@season 对这样一个模糊的问题提出质疑。我希望一开始能分享更多细节,但我还不够了解可能出了什么问题。
TL;DR
- 就拿一个Mac。尝试通过 Codemagic 进行调试是行不通的。
- 对于 Firebase,请确保您确实通过 Xcode 添加了 GoogleServices-info.plist 文件。尝试手动添加它并破解 project.pbxproj 文件可能行不通(这是一个实用的建议,我没有最终证明这一点)。 https://firebase.google.com/docs/flutter/setup?platform=ios#add-config-file
- 对于 AdMob,请务必将您的应用程序 ID 添加到 info.plist。 https://pub.dev/packages/firebase_admob
我最近几天一直面临这个错误,今天碰巧解决了。因此,我想与将 iOS 应用程序连接到 firebase 后遇到启动错误的任何人分享它。
我在使用 firebase 设置新的 iOS 应用程序时遵循了所有步骤,这正是导致错误的原因,就我而言。如果您在 AppDelegate.swift
中放置了 import 'Firebase' 和 Firebase.configure()
,请将其删除并再次 运行 您的应用程序。我删除了这两行并且它工作正常。使用 Cloud Firestore 对其进行测试(只需让一个按钮向您的 Cloud Firestore 写入内容)并确保在按下按钮时也添加 await Firebase.initializeApp();
。
我完成了所有这些步骤并且对我来说效果很好。
P.S。我在 Mac 的 android 工作室完成了它。
对于像我这样的新手,请确保在 ios/Runner/AppDelegate.swift
文件中的 GeneratedPluginRegistrant
之前注册 firebase。
// This works without crashes, FirebaseApp.configure() after GeneratedPluginRegistrant crashes
FirebaseApp.configure()
GeneratedPluginRegistrant.register(with: self)
我遇到了同样的问题,解决方法如下:
在flutter sdk的文件夹下, 我做了 git 拉然后 运行 再次应用程序并解决了。
如果你在 flutter 应用中使用 Google Firebase 库
确保在 AppDelegate.swift
文件中的 GeneratedPluginRegistrant.register(with: self)
之前使用 FirebaseApp.configure()
。
FirebaseApp.configure()
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
使用终端运行 应用程序。 运行 这个命令
flutter run --release
对于 iOS:在我们的例子中,这是因为 Facebook 插件更新。
以前的版本:flutter_facebook_auth: ^3.5.1
新版本:flutter_facebook_auth: ^4.3.3
Info.plist 文件中缺少 FacebookClientToken
。所以在添加之后它起作用了。
<key>FacebookClientToken</key>
<string>$(FACEBOOK_CLIENT_TOKEN)</string>