ios - 将 Flutter App 的 iOS 部分连接到 Firebase 的更多问题
问题描述
按照本指南将我的 Flutter 应用程序连接到 Firebase,该指南说open ios/Runner.xcworkspace
在我的应用程序的顶级目录中运行终端命令,它应该在 Xcode 中打开并如下所示:
但我的看起来像这样:
我正在使用的组合中的一个或多个成员 - Swift/Xcode 10/iOS 12/iPhone XS Max - 似乎是问题的根源。也许太前沿了。
有没有办法让这种组合发挥作用,还是我需要退回到 Objective-C、iOS 11.4(或 11.3)和/或 iPhone X?
解决方案
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) 将现有的 Xcode 应用程序(和Xcode 命令行工具)拖到回收站Applications/Xcode
,卸载现有的 Xcode 应用(和 Xcode 命令行工具) 。根据您拥有的 Xcode 版本,您可能有也可能没有最后一个文件。~/Library/Developer/
~/Library/Caches/com.apple.dt.Xcode
2) 在终端中使用brew uninstall cocoapods
. (如果您使用 RVM 而不是 Homebrew 安装 Cocoapods,则不需要)
3) 安装 Xcode 10.1。打开它以安装其他工具。Ran sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
,sudo 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 不再是我路径中的第一个条目,但事情仍在正常运行。不确定这对其他事情是否至关重要,但似乎不会影响这种情况。)
7) 重新安装 Cocoapods gem install -n /usr/local/bin cocoapods -v 1.6.0.beta.2
。
8) 将所有宝石更新为gem update
.
9) 用brew update && brew upgrade && brew cleanup; brew doctor
.
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 应用程序添加到项目“注册应用程序”:
/ios/Runner
IntelliJ Idea 项目中的右键单击文件夹- 选择“Flutter > 在 Xcode 中打开 iOS 模块”
- 单击左侧面板顶部的“Runner”图标
- 在中心面板的“常规”选项卡下,复制了“身份”下顶部第二行中的捆绑标识符,看起来像“com.company.app”。(如果您没有看到“常规”选项卡,请单击中心面板顶部第二行的“跑步者”,而不是第一行的“跑步者”,然后从下拉列表中选择“目标 - 跑步者”而不是“项目 - 跑步者”。)
- 在 Firebase 步骤 1 中粘贴包标识符输入“注册应用程序 - iOS 包 ID”
- 将其他输入留空,单击“注册应用程序”按钮。
14) 遵循 Firebase 步骤 2:
- 下载
GoogleService-Info.plist
到桌面 - 在 Xcode 中(参见下面的注释),右键单击内部Runner 文件夹(左面板“Runner > Runner”)
- 选择“将文件添加到 Runner...”
- 添加了
GoogleService-Info.plist
文件。
注意:最初GoogleService-Info.plist
直接下载到/ios/Runner
IntelliJ 项目中的文件夹,但这导致了错误,在此处描述和解决。虽然在完成第 2 步后,它GoogleService-Info.plist
确实出现在 Xcode 的 Runner 文件夹中,但它没有出现在/ios/Runner
IntelliJ 项目的文件夹中。我不确定这是否会造成未来的问题,但目前不会。
15) 遵循 Firebase 步骤 3:
- 在 IntelliJ 终端中,
cd ios
然后运行pod init
. (如果你已经有一个 Podfile,你可以跳过这一步,尽管如果事情最终不能正常工作,你可能想回到这一步并生成一个新的 Podfile。) - 打开 Podfile 并取消注释顶部的“平台: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 应用设置屏幕中,
FirebaseApp.configure()
从 Swift 版本的 AppDelegate` 初始化代码中复制 - 粘贴到
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 模拟器”。iOS 模拟器以“iPhone XS”打开。我在 iOS 模拟器中使用“硬件 > 设备 > iOS 12.1 > iPhone XS Max”更改了设备。
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 之间的连接似乎可以正常运行。
推荐阅读
- spring - Spring Boot中是否允许多个嵌入式容器
- javascript - 在 React.js 中调用 API 数据并将其传递给其他组件
- java - 有什么方法可以在 ACTION_OPEN_DOCUMENT_TREE 上添加自定义额外信息
- python - 用熊猫替换数据框中列的所有值
- javascript - React - 当我的 React 钩子更新时,我的用户界面无法正确重新渲染
- python - 熊猫只需要一年的完整日期
- redux - push 不是 redux 中的功能
- c# - 示例场景一直说未加载,我点击播放按钮,播放场景被统一冻结
- c++ - C ++朋友类循环包括
- javascript - 在javascript中将按位运算结果与0进行比较