将Flutter App的iOS部分连接到Firebase的更多问题

时间:2018-10-15 03:46:58

标签: ios firebase flutter

在跟随this guide将Flutter应用程序连接到Firebase时,该指南说,在我的应用程序的顶级目录中运行终端命令open ios/Runner.xcworkspace,它应在Xcode中打开,如下所示:< / p>

enter image description here

我的看起来像这样:

enter image description here

问题似乎出在我正在使用的组合中的一个或多个成员-Swift / Xcode 10 / iOS 12 / iPhone XS Max。也许太前沿了。

是否有办法使此组合正常工作,还是需要退回到Objective-C,iOS 11.4(或11.3)和/或iPhone X?

1 个答案:

答案 0 :(得分:0)

tldr;使用iPhone XS Max ios 12.1模拟器将Flutter应用程序连接到Firebase的步骤。 YMMV,使用后果自负。

我能够解决我的问题,并让我的Swift / Xcode 10 / iOS 12 / iPhone XS Max Flutter项目连接到Firebase,尽管最终它是Swift / Xcode 10.1 / iOS 12.1 / iPhone XS Max。由于Firebase,Swift,Xcode,Cocoapods和RVM是相互关联/相互依赖的,因此我不知道到底是哪件事或所做的事情解决了我的问题,因此,我概述了所有步骤,以便您也在使用类似配置连接到Firebase时遇到问题,这些步骤中的一个或多个步骤可能有助于解决您的问题。

1)通过将Applications/Xcode~/Library/Developer/~/Library/Caches/com.apple.dt.Xcode拖到垃圾箱,卸载现有的Xcode应用程序(和Xcode命令行工具)。您可能没有最后一个文件,具体取决于您拥有的Xcode的版本。

2)使用brew uninstall cocoapods在终端中卸载了Cocoapods。 (如果您是使用RVM而非Homebrew安装Cocoapods的,则不需要)

3)已安装Xcode 10.1。打开它以安装其他工具。运行sudo xcode-select --switch /Applications/Xcode.app/Contents/Developersudo xcodebuild -license(分页多次并输入“同意”)和sudo DevToolsSecurity -enable

4)安装了Xcode 10.1命令行工具。

5)跑rvm get stable --auto-dotfiles。我的.zshrc文件(可能是.bashrc或.bash_profile文件)的底部看起来像这样(下面没有其他行):

export PATH="$PATH:$HOME/.rvm/bin"
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

6)由于我使用zsh而不是bash,因此运行source ~/.zshrc更新当前的终端会话,然后运行rvm cleanup all。运行echo $PATH来验证我所需的gemset是路径中的第一个条目。 (更新:gemset不再是我路径中的第一个条目,但是事情仍在正常进行。不确定这对其他事情是否至关重要,但似乎不会影响这种情况。) < / p>

7)用gem install -n /usr/local/bin cocoapods -v 1.6.0.beta.2重新安装了Cocoapods。

8)用gem update更新了所有宝石。

9)用brew update && brew upgrade && brew cleanup; brew doctor更新了Homebrew,我的配方和酒桶。

10)跑pod setup

11)要将我的Xcode模拟器默认设备设置为“ iPhone XS Max”,请运行xcrun simctl list --json生成可用模拟器设备的列表。在“ iOS 12.1”下找到与iPhone XS Max关联的UDID,将UUID复制并粘贴到此命令xcrun simctl boot DB8E7F47-DD01-4952-9BE8-5BCEB6BDBDB0中并运行它。 (更新:似乎不再需要此步骤。在下面的步骤17中在IntelliJ Idea项目中打开iOS模拟器时,您应该能够通过选择“硬件>设备> iOS 12.1> iPhone”来选择设备XS Max”(在iOS模拟器中)。

12)在IntelliJ Idea项目中,打开pubspec.yaml文件并添加firebase_core: ^0.2.5+1,如下所示:

dependencies:
  flutter:
    sdk: flutter
  firebase_core: ^0.2.5+1

然后在IntelliJ Idea IDE中选择“ Packages get”。

13)按照Firebase步骤1将iOS应用添加到项目“注册应用”:

  • 在IntelliJ Idea项目中右键单击/ios/Runner文件夹
  • 选择“ Flutter>在Xcode中打开iOS模块”
  • 点击左侧面板顶部的“赛跑者”图标
  • 在中心面板的“常规”选项卡下,将捆绑包标识符复制到“身份”下方顶部的第二行中,看起来像“ com.company.app”。 (如果您没有看到“常规”标签,请点击中间面板顶部的第二行上的“运行器”,而不是第一行上的“运行器”,然后选择“目标-下拉菜单中的“亚军”,而不是“项目-亚军”。)
  • 在Firebase步骤1中粘贴的捆绑包标识符,输入“注册应用-iOS捆绑包ID”
  • 将其他输入留空,单击“注册应用”按钮。

14)遵循Firebase步骤2:

  • GoogleService-Info.plist下载到了桌面
  • 在Xcode中(请参阅下面的注释),右键单击内部 Runner文件夹 (左侧面板“ Runner> Runner”)
  • 选择“将文件添加到运行器...”
  • 添加了GoogleService-Info.plist文件。

注意:最初将GoogleService-Info.plist直接下载到IntelliJ项目的/ios/Runner文件夹中,但这引起了错误,描述并解决了here。在完成步骤2之后,GoogleService-Info.plist 没有出现在Xcode的Runner文件夹中,而没有却出现在IntelliJ项目的/ios/Runner文件夹中。我不确定这是否会造成将来的问题,但目前不会。

15)遵循Firebase步骤3:

  • 在IntelliJ终端中,先运行cd ios,然后运行pod init。 (如果您已经拥有Podfile,则可以跳过此步骤,尽管如果最终无法正常工作,则可能要返回此步骤并生成一个新的Podfile。)
  • 打开Podfile,顶部未注释“ platform:ios”行,并将值更改为“ 12.1”
  • 仍然在Podfile中,添加了pod 'Firebase/Core'

用于放置Podfile代码的代码段:

target 'Runner' do
  use_frameworks!
  pod 'Firebase/Core'
  • 打开project_name/ios/flutter/release.xconfig并添加行#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"
  • pod install

16)遵循Firebase步骤4:

  • 在Firebase应用设置屏幕中,从import Firebase初始化代码的Swift版本复制了AppDelegate
  • 粘贴到project_name/ios/runner/AppDelegate.swift
  • 在Firebase应用设置屏幕中,从Swift版本的AppDelegate`初始化代码复制了FirebaseApp.configure()
  • 粘贴到project_name/ios/runner/AppDelegate.swift

AppDelegate.swift文件代码放置的代码段:

import UIKit
import Flutter
import Firebase                   //  <--

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?
  ) -> Bool {
    GeneratedPluginRegistrant.register(with: self)

    FirebaseApp.configure()      //  <--

    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

17)在IntelliJ中,从右上角的下拉菜单中选择“打开iOS模拟器”。使用“ iPhone XS”打开了iOS模拟器。我通过“硬件>设备> iOS 12.1> iPhone XS Max”在iOS模拟器中更改了设备。

18)在IntelliJ终端中,运行“ flutter doctor -v”,并输出以下内容:

[✓] Flutter (Channel dev, v1.1.9, on Mac OS X 10.14.2 18C54, locale en-US)
    • Flutter version 1.1.9 at /Users/my-macbookpro/flutter
    • Framework revision 1407091bfb (2 weeks ago), 2019-01-08 20:40:19 -0800
    • Engine revision e5ec3cf3ea
    • Dart version 2.1.1 (build 2.1.1-dev.0.1 2cb346bd0c)

[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    • Android SDK at /Users/my-macbookpro/Library/Android/sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 28.0.3
    • ANDROID_HOME = /Users/my-macbookpro/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1136-b06)
    • All Android licenses accepted.

[✓] iOS toolchain - develop for iOS devices (Xcode 10.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 10.1, Build version 10B61
    • ios-deploy 1.9.4
    • CocoaPods version 1.6.0.beta.2

[✓] Android Studio (version 3.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 29.1.1
    • Dart plugin version 181.5656
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1136-b06)

[✓] IntelliJ IDEA Community Edition (version 2018.3.4)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 31.3.4
    • Dart plugin version 183.5429.25

[✓] Connected device (1 available)
    • iPhone XS Max • DB8E7F47-DD01-4952-9BE8-5BCEB6BDBDB0 • ios • iOS 12.1 (simulator)

• No issues found!

19)在IntelliJ中,单击右上角的“运行”绿色箭头图标。程序构建完成后,在Firebase安装网页上查看收到的确认消息“恭喜,您已成功将Firebase添加到您的应用程序中!”

执行以下步骤后,应用程序和Firebase之间的连接似乎正常运行。