パルカワ2

最近はFlutterをやっています

FlutterでMacアプリをビルドしてFirestoreにつなげようとすると固まる

趣味でMacアプリでも作ってみるかと思ったら早速ハマってしまった………

Firebase準備

  • プロジェクトを作る
  • Firestoreのデータベースを作成する

コマンド

cd app
flutter create --org com.hisaichi5518 --platforms=ios,macos .
firebase login
dart pub global activate flutterfire_cli
flutter pub add firebase_core
flutter pub add cloud_firestore
flutterfire configure --platforms=ios,macos --ios-bundle-id=com.hisaichi5518.app --macos-bundle-id=com.hisaichi5518.app

macos/PodfileにてFirestoreが依存する最低バージョンに書き換える

platform :osx, '10.12'

アプリを立ち上げたらFirestoreのドキュメントが作られるコードを書いてみる

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';

import 'firebase_options.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );

  final db = FirebaseFirestore.instance;
  final user = <String, dynamic>{
    "first": "Ada",
    "last": "Lovelace",
    "born": 1815
  };
  final doc = await db.collection("users").add(user);
  print('DocumentSnapshot added with ID: ${doc.id}');
  runApp(const MyApp());
}

Macアプリの場合は、無が表示されてしまう。ログすら出ないので困った。

iOSアプリはうまくドキュメントが作成されて画面も表示される。

アプリが作成された時点ではBundleIdが、 ios, macosともに com.hisaichi5518.app になっているのでそれぞれ変更してみたけどダメだった

またFirebaseは無料版はアプリが3個しか登録できない。flutterfire configureがよしなに作成してくれるが3個以上作ってもエラーにならないので注意

追記: 解決方法

macos/Runner/DebugProfile.entitlements に以下の設定を追加してあげれば動いた。

<key>com.apple.security.network.client</key>
<true/>

SocketException: Connection failed (OS Error: Operation not permitted, errno = 1) with flutter app on macOS - Stack Overflow

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.3.2, on macOS 12.5.1 21G83 darwin-arm, locale ja-JP)
[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 14.0)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2021.3)
[✓] Android Studio (version 2021.2)
[✓] IntelliJ IDEA Ultimate Edition (version 2022.2.2)
[✓] IntelliJ IDEA Ultimate Edition (version 2022.2.2)
[✓] IntelliJ IDEA Ultimate Edition (version 2022.2.1)
[✓] VS Code (version 1.71.2)
[✓] Connected device (3 available)
[✓] HTTP Host Availability

• No issues found!

サンプルアプリは動く

flutterfire/packages/cloud_firestore/cloud_firestore/example at master · firebase/flutterfire · GitHub

関連

Add Firebase to your Flutter app

まとめ

flutterfire configureが便利だった。 FlutterFireのmacOS対応はまだβ版らしいので本格的に使うのはまだ先かなぁ