为什么我的Flutter应用在iOS启动时崩溃?

16
我正在尝试使用Flutter构建一个简单的iOS和Android应用程序,但在我试图在iPhone上运行时应用程序会在启动时崩溃(Android正常运行)。由于我没有Mac电脑,所以我使用Codemagic编译发布版本并部署到TestFlight,然后从那里安装到iPhone上。据我所知,Apple只在Xcode中显示崩溃日志(在线的App Store Connect中没有任何信息?),而我没有Mac电脑,我无法查看这些日志。你有什么想法或者可以收集哪些信息来调试这个问题?
谢谢!编辑:我已经深入挖掘一些资料,看起来崩溃与Firebase依赖有关。如果我创建Flutter演示项目(flutter create),则iOS上运行良好。但是,如果我随后向pubspec.yaml添加Firebase包并手动添加GoogleServices-info.plist,则应用程序在启动时会崩溃。(我还没有添加任何使用Firebase的代码。)GoogleServices-info.plist应该使用Xcode添加,但由于我没有Xcode或Mac电脑,这使得它很困难。这个问题的第二个答案给出了一个建议:Where to save GoogleService-Info.plist in Flutter without Xcode? 我尝试进行了这些更改,但得到了相同的结果。你有什么关于在没有Mac电脑的情况下添加Firebase的建议吗?
9个回答

20

好的,这里是发生的事情。最初,iOS的应用程序崩溃了,因为GoogleServices-info.plist文件存在问题(可能)。由于没有错误消息,所以我不知道该在哪里寻找解决方法。最后,我回到简单的演示应用程序,并开始逐步添加功能以隔离问题。演示应用程序可以在iOS上构建和运行而没有任何问题,但是当我添加Firebase依赖项(作为一组)时,它就失败了。我已经手动添加了GoogleServices-info.plist文件(在Xcode之外),并使用文本编辑器调整了ios/Runner.xcodeproj/project.pbxproj中的引用,但那并没有起作用。

此时,我终于崩溃了并拥有了一台MacBook电脑。通过在Mac上进行调试,我现在可以看到应用程序无论是在模拟器的调试模式下还是在设备上的发布模式下都会崩溃,但仍然没有有用的错误消息。我使用Xcode添加了GoogleServices-info.plist文件,因此至少这一部分是正确的,但是应用程序仍然立即崩溃。在查阅文档时,我意识到在制作示例应用程序时,我忘记了将AdMob的应用程序ID添加到info.plist文件中。此时只有AdMob导致崩溃,而不是其他Firebase依赖项。我将其添加回去,一切都正常运行。真希望一个月前就看到了它。呃。

感谢 @Mikhail Tokharev 和 @season 尝试回答这样一个含糊的问题。我希望一开始能提供更多细节,但是我不知道可能出了什么问题。

TL;DR

  1. 只需使用 Mac。尝试通过 Codemagic 进行调试将不起作用。
  2. 对于 Firebase,请确保你实际上通过 Xcode 添加了 GoogleServices-info.plist 文件。尝试手动添加并修改 project.pbxproj 文件可能不起作用(这是一个实际的建议,我没有证明这个建议是否确凿)。 https://firebase.google.com/docs/flutter/setup?platform=ios#add-config-file
  3. 对于 AdMob,请确保将应用程序 ID 添加到 info.plist 中。https://pub.dev/packages/firebase_admob

请删除您的第四点,那不是一个回答点。 :P - surajs1n
我使用Android Studio添加了GoogleServices-info.plist,然后将其删除,并使用Xcode重新添加。应用程序启动良好,但现在它不显示任何内容,只有一个白屏。 - ASAD HAMEED
我根本没有使用Firebase功能。但是我的应用程序在打开后立即崩溃。它已经通过了TestFlight的审核。从TestFlight下载并打开应用程序后,应用程序会崩溃。我无法找到根本原因。有什么建议吗? - MaheshPeri19
我也是一样。为了澄清,这段代码缺失:<key>ADMOB_APP_ID</key><string>ca-app-pub-key</string>。 - Michał Dobi Dobrzański
只是添加此链接以进一步澄清Asad的观点,即您应该如何添加GoogleServices-info.plist,因为这是我的问题。https://firebase.flutter.dev/docs/installation/ios/#installing-your-firebase-configuration-file - James

5

最近几天我一直面对这个错误,今天终于解决了。所以,我想与任何在将他们的iOS应用程序连接到Firebase后遇到启动错误的人分享这个问题。

当我使用Firebase设置新的iOS应用程序时,我遵循了所有步骤,但在我的情况下,以下内容导致了错误。如果您在AppDelegate.swift中放置了import 'Firebase'Firebase.configure(),请将其删除并重新运行应用程序。我移除了这两行代码,应用程序就可以正常工作了。使用Cloud Firestore进行测试(只需创建一个按钮,将某些内容写入您的Cloud Firestore),并确保在按下按钮时添加await Firebase.initializeApp();

我执行了所有这些步骤,并且应用程序可以正常工作。

附:我是在Mac上使用Android Studio完成的。


3

对于像我这样的新手,请确保在您的 ios/Runner/AppDelegate.swift 文件中,在 GeneratedPluginRegistrant 之前注册 firebase。

// This works without crashes, FirebaseApp.configure() after GeneratedPluginRegistrant crashes
FirebaseApp.configure()
GeneratedPluginRegistrant.register(with: self)

1
这个救了我的命。我真的不知道为什么文档没有明确说明放置这些东西的位置。 - mtkguy
你能更具体地说明要将这个文件粘贴到哪个位置以及使用什么文件名吗? - Arslan Kaleem
在AppDelegate.swift文件中添加以下两行代码:import FirebaseFirebaseApp.configure() (在GeneratedPluginRegistrant.register(with: self)之前) - Sahil Hariyani
我没有 appDelegate.swift 文件,我该怎么办? - azheen

2

使用终端运行应用程序。

运行以下命令:

flutter run --release


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

1

对于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>

1
我曾遇到同样的问题,因为我是新手iOS部署者,忘记添加必要的能力,导致在TestFlight中崩溃了我的应用程序...所以请确保您已经在Xcode的签名和能力选项卡中添加了所需的能力。

好的,这是我没有做过的事情。Firebase需要哪些能力?我只是使用了标准的Flutter演示应用程序,并添加了Firebase依赖项,因此似乎没有任何能力适用。 - watts
是的,我正在使用FirebaseMessaging包...您需要通过添加功能中的底部最后3个选项来添加推送通知和后台任务...并按照以下步骤进行操作:https://pub.dev/packages/firebase_messaging - season
好的,谢谢你提醒我。我还没有使用过Firebase Messaging,但是我会把它放在我的待办事项列表中去了解一下。我会记住这个提示的。 - watts

0
如果您在Flutter应用程序中使用Google Firebase库,请确保在AppDelegate.swift文件中在GeneratedPluginRegistrant.register(with: self)之前使用FirebaseApp.configure()
FirebaseApp.configure()
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)

0
我曾经遇到过同样的问题,并通过以下方法解决:
在Flutter SDK文件夹中,我进行了git pull操作,然后再次运行应用程序,问题就得到了解决。

0

嘿,谢谢你的建议!我尝试使用最新版本的beta分支(1.17.0-3.4.pre)和稳定分支(1.17.0)进行编译,但都没有解决问题。当我在iPhone上运行应用程序时,它仍然会立即崩溃。而且看起来这个bug影响了Android和iOS?在我的情况下,只有iOS崩溃了。 - watts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接