diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index ab1c923..0ae0a6d 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -16,6 +16,11 @@ jobs: with: flutter-version: "3.41.9" + - name: Upgrade Firebase for Xcode 26 compatibility + run: | + sed -i '' 's/firebase_core: 2.32.0/firebase_core: ^3.13.1/' pubspec.yaml + sed -i '' 's/firebase_messaging: 14.7.10/firebase_messaging: ^15.2.5/' pubspec.yaml + - name: Install Dependencies run: flutter pub get diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 04667cf..1c22bee 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -176,6 +176,6 @@ SPEC CHECKSUMS: sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe -PODFILE CHECKSUM: e30f02f9d1c72c47bb6344a0a748c9d268180865 +PODFILE CHECKSUM: ecb39f0da990336cc02cd0b433a02558e58ace35 COCOAPODS: 1.16.2 diff --git a/ios/build/.last_build_id b/ios/build/.last_build_id new file mode 100644 index 0000000..3887ace --- /dev/null +++ b/ios/build/.last_build_id @@ -0,0 +1 @@ +2edd7a931624573eff7b4280d22a7f4e \ No newline at end of file diff --git a/lib/common/utils/fcm_service.dart b/lib/common/utils/fcm_service.dart index de2dff5..f7c4f1c 100644 --- a/lib/common/utils/fcm_service.dart +++ b/lib/common/utils/fcm_service.dart @@ -101,17 +101,26 @@ class FcmService { } // 7. Print FCM token for debugging - final token = await getToken(); - debugPrint('[FCM] Token: $token'); + try { + final token = await getToken(); + debugPrint('[FCM] Token: $token'); + } catch (e) { + // Simulator atau APNs belum dikonfigurasi — skip token fetch + debugPrint('[FCM] Token unavailable: $e'); + } } Future _requestPermission() async { - final settings = await _messaging.requestPermission( - alert: true, - badge: true, - sound: true, - ); - debugPrint('[FCM] Permission status: ${settings.authorizationStatus}'); + try { + final settings = await _messaging.requestPermission( + alert: true, + badge: true, + sound: true, + ); + debugPrint('[FCM] Permission status: ${settings.authorizationStatus}'); + } catch (e) { + debugPrint('[FCM] Permission request failed: $e'); + } } Future _setupLocalNotifications() async { diff --git a/lib/main.dart b/lib/main.dart index 25f0646..96d63a4 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,3 +1,4 @@ +import 'package:firebase_crashlytics/firebase_crashlytics.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -25,12 +26,23 @@ void main() async { kReleaseMode ? Environment.prod : Environment.dev, ); + // Setup Crashlytics + FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError; + PlatformDispatcher.instance.onError = (error, stack) { + FirebaseCrashlytics.instance.recordError(error, stack, fatal: true); + return true; + }; + // Initialize FCM after dependencies are ready - await getIt().initialize( - onMessageTap: (message) { - debugPrint('[FCM] Navigate based on: ${message.data}'); - }, - ); + try { + await getIt().initialize( + onMessageTap: (message) { + debugPrint('[FCM] Navigate based on: ${message.data}'); + }, + ); + } catch (e) { + debugPrint('[FCM] Initialization failed: $e'); + } runApp(const AppWidget()); } diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 476a6ba..c1968fc 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -9,6 +9,7 @@ import connectivity_plus import device_info_plus import file_selector_macos import firebase_core +import firebase_crashlytics import firebase_messaging import flutter_local_notifications import open_file_mac @@ -23,6 +24,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) + FLTFirebaseCrashlyticsPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCrashlyticsPlugin")) FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin")) FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin")) OpenFilePlugin.register(with: registry.registrar(forPlugin: "OpenFilePlugin")) diff --git a/pubspec.lock b/pubspec.lock index 91b13a6..205f571 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -13,10 +13,10 @@ packages: dependency: transitive description: name: _flutterfire_internals - sha256: ff0a84a2734d9e1089f8aedd5c0af0061b82fb94e95260d943404e0ef2134b11 + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" url: "https://pub.dev" source: hosted - version: "1.3.59" + version: "1.3.35" analyzer: dependency: transitive description: @@ -213,10 +213,10 @@ packages: dependency: transitive description: name: characters - sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 url: "https://pub.dev" source: hosted - version: "1.4.1" + version: "1.4.0" checked_yaml: dependency: transitive description: @@ -461,50 +461,66 @@ packages: dependency: "direct main" description: name: firebase_core - sha256: "7be63a3f841fc9663342f7f3a011a42aef6a61066943c90b1c434d79d5c995c5" + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" url: "https://pub.dev" source: hosted - version: "3.15.2" + version: "2.32.0" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface - sha256: "0ecda14c1bfc9ed8cac303dd0f8d04a320811b479362a9a4efb14fd331a473ce" + sha256: "8bcfad6d7033f5ea951d15b867622a824b13812178bfec0c779b9d81de011bbb" url: "https://pub.dev" source: hosted - version: "6.0.3" + version: "5.4.2" firebase_core_web: dependency: transitive description: name: firebase_core_web - sha256: "0ed0dc292e8f9ac50992e2394e9d336a0275b6ae400d64163fdf0a8a8b556c37" + sha256: eb3afccfc452b2b2075acbe0c4b27de62dd596802b4e5e19869c1e926cbb20b3 url: "https://pub.dev" source: hosted - version: "2.24.1" + version: "2.24.0" + firebase_crashlytics: + dependency: "direct main" + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" firebase_messaging: dependency: "direct main" description: name: firebase_messaging - sha256: "60be38574f8b5658e2f22b7e311ff2064bea835c248424a383783464e8e02fcc" + sha256: "980259425fa5e2afc03e533f33723335731d21a56fd255611083bceebf4373a8" url: "https://pub.dev" source: hosted - version: "15.2.10" + version: "14.7.10" firebase_messaging_platform_interface: dependency: transitive description: name: firebase_messaging_platform_interface - sha256: "685e1771b3d1f9c8502771ccc9f91485b376ffe16d553533f335b9183ea99754" + sha256: "87c4a922cb6f811cfb7a889bdbb3622702443c52a0271636cbc90d813ceac147" url: "https://pub.dev" source: hosted - version: "4.6.10" + version: "4.5.37" firebase_messaging_web: dependency: transitive description: name: firebase_messaging_web - sha256: "0d1be17bc89ed3ff5001789c92df678b2e963a51b6fa2bdb467532cc9dbed390" + sha256: "90dc7ed885e90a24bb0e56d661d4d2b5f84429697fd2cbb9e5890a0ca370e6f4" url: "https://pub.dev" source: hosted - version: "3.10.10" + version: "3.5.18" fixnum: dependency: transitive description: @@ -865,26 +881,26 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" + sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" url: "https://pub.dev" source: hosted - version: "11.0.2" + version: "10.0.9" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 url: "https://pub.dev" source: hosted - version: "3.0.10" + version: "3.0.9" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.1" line_icons: dependency: "direct main" description: @@ -921,26 +937,26 @@ packages: dependency: transitive description: name: matcher - sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 url: "https://pub.dev" source: hosted - version: "0.12.19" + version: "0.12.17" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.13.0" + version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c url: "https://pub.dev" source: hosted - version: "1.17.0" + version: "1.16.0" mime: dependency: transitive description: @@ -1510,10 +1526,10 @@ packages: dependency: transitive description: name: test_api - sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a" + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd url: "https://pub.dev" source: hosted - version: "0.7.10" + version: "0.7.4" time: dependency: transitive description: @@ -1646,10 +1662,10 @@ packages: dependency: transitive description: name: vector_math - sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.1.4" vm_service: dependency: transitive description: @@ -1731,5 +1747,5 @@ packages: source: hosted version: "3.1.3" sdks: - dart: ">=3.9.0-0 <4.0.0" + dart: ">=3.8.1 <4.0.0" flutter: ">=3.29.0" diff --git a/pubspec.yaml b/pubspec.yaml index 7a49f02..b3d5b40 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -48,8 +48,9 @@ dependencies: pdf: ^3.11.3 open_file: ^3.5.10 permission_handler: ^12.0.1 - firebase_core: ^3.13.1 - firebase_messaging: ^15.2.5 + firebase_core: 2.32.0 + firebase_messaging: 14.7.10 + firebase_crashlytics: ^3.5.7 flutter_local_notifications: ^18.0.1 hugeicons: ^1.1.6